home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 16
/
Aminet 16 (1996)(GTI - Schatztruhe)[!][Dec 1996].iso
/
Aminet
/
misc
/
emu
/
QDOS2.lha
/
QLsource
/
ROMsrc
/
SYS
/
BASIC5_asm
< prev
next >
Wrap
Text File
|
1995-08-27
|
88KB
|
3,808 lines
;/*beginfile BASIC5_asm
; --------------------------------------------------------------
; BASIC5_asm - BASIC bits
; - last modified 27/08/95
; QDOS-Amiga sources by Rainer Kowallik
; ...some changes by Mark J Swift
; --------------------------------------------------------------
; create coded program / code line #
L08474:
JSR L04E4C(PC) ;*/undomodify BSR L04E4C
MOVEA.L BV_RIP(A6),A1 ;arith stack
JSR CN_DTOI(PC) ;*/undomodify BSR CN_DTOI
BNE.S L084A4
TST.W 0(A6,A1.L)
BLE.S L084A4
TST.B BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
BEQ.S L08496
L0848E ADDA.W #$C,A7
MOVEQ #1,D0
RTS
L08496 MOVEQ #4,D1
MOVEQ #-$73,D4
MOVE.W 0(A6,A1.L),D5
JSR L08E0A(PC) ;*/undomodify BSR L08E0A
ADDQ.L #2,(A7)
L084A4 RTS
L084A6:
DC.L $04050709,$0C012D01,$2B027E7E,$134E4F54
L084B6:
LEA L084A6(PC),A2
JSR L08748(PC) ;*/undomodify BSR L08748
BRA.S L084C8
MOVEQ #-$7A,D4
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
ADDQ.L #2,(A7)
L084C8 RTS
L084CA:
MOVEQ #1,D3
BRA.S L084D0
L084CE:
MOVEQ #0,D3
L084D0 MOVEA.L A0,A3
JSR L08706(PC) ;*/undomodify BSR L08706
BRA.S L084F8
MOVE.L A0,D5
SUB.L A3,D5
CMPI.W #$00FF,D5
BGT.S L084F8
MOVE.L A0,-(A7)
JSR L08622(PC) ;*/undomodify BSR L08622
;check name in buffer and
;get address of name list
BRA.S L084F6 ;error
MOVEA.L (A7)+,A0
MOVEQ #-$78,D4
JSR L08E0A(PC) ;*/undomodify BSR L08E0A
ADDQ.L #2,(A7)
RTS
L084F6 MOVEA.L (A7)+,A0
L084F8 RTS
L084FA:
DC.W $1617,$191B,$1D1F,$2224,$2729,$2C2F,$3134,$373A
DC.W $3C3E,$4145,$494D
DC.B $51
DC.B $01,'+'
DC.B $01,'-'
DC.B $01,'*'
DC.B $01,'/'
DC.B $02,'>='
DC.B $01,'>'
DC.B $02,'=='
DC.B $01,'='
DC.B $02,'<>'
DC.B $02,'<='
DC.B $01,'<'
DC.B $02,'||'
DC.B $02,'&&'
DC.B $02,'^^'
DC.B $01,'^'
DC.B $01,'&'
DC.B $12,'OR'
DC.B $13,'AND'
DC.B $13,'XOR'
DC.B $13,'MOD'
DC.B $13,'DIV'
DC.B $15,'INSTR'
DC.B $00
L08552:
LEA L084FA(PC),A2
JSR L08748(PC) ;*/undomodify BSR L08748
BRA.S L08564
MOVEQ #-$7B,D4
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
ADDQ.L #2,(A7)
L08564 RTS
L08566 ; table of 5 separators
DC.B $05,$06,$08,$0A
DC.W $0C0E
DC.B $01,',',$01,';',$01,'\'
DC.B $01,'!',$12,'TO'
DC.B $00
L08578:
LEA L08566(PC),A2
JSR L08748(PC) ;*/undomodify BSR L08748
BRA.S L0858A ;error
MOVEQ #-$72,D4
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
ADDQ.L #2,(A7)
L0858A RTS
L0858C MOVEQ #0,D1
MOVEQ #0,D5
L08590 ADDQ.W #1,D5
MOVE.B 0(A6,A0.L),D1
ADDQ.W #1,A0
CMPI.B #$20,D1
BEQ.S L08590
SUBQ.W #1,A0
SUBQ.W #1,D5
BEQ.S L085AA
MOVEQ #-$80,D4
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
L085AA RTS
L085AC:
MOVE.B 0(A6,A0.L),D2
CMPI.B #$22,D2
BEQ.S L085BC
CMPI.B #$27,D2
BNE.S L085DE
L085BC LEA 1(A0),A2
MOVEQ #-1,D5
MOVEQ #$0A,D3
L085C4 ADDQ.W #1,A0
ADDQ.W #1,D5
MOVE.B 0(A6,A0.L),D1
CMP.B D3,D1
BEQ.S L085DE
CMP.B D2,D1
BNE.S L085C4
ADDQ.W #1,A0
MOVEQ #-$75,D4
JSR L08E38(PC) ;*/undomodify BSR L08E38
ADDQ.L #2,(A7)
L085DE RTS
L085E0:
JSR L0872C(PC) ;*/undomodify BSR L0872C
BNE.S L085F2
MOVEA.L BV_TKP(A6),A3 ;token list running pointer
CMPI.B #$80,-$02(A6,A3.L)
BNE.S L0860A
L085F2 MOVEA.L A0,A2
MOVE.L BV_BFP(A6),D5 ;buffer running pointer
SUBQ.L #1,D5
MOVEA.L D5,A0
SUB.L A2,D5
BEQ.S L08608
MOVEQ #-$74,D4
MOVEQ #0,D2
JSR L08E38(PC) ;*/undomodify BSR L08E38
L08608 ADDQ.L #2,(A7)
L0860A RTS
L0860C:
JSR L04E4C(PC) ;*/undomodify BSR L04E4C
MOVEA.L BV_RIP(A6),A1 ;arith stack
JSR CN_DTOF(PC) ;*/undomodify BSR CN_DTOF
BNE.S L08620
JSR L08E12(PC) ;*/undomodify BSR L08E12
ADDQ.L #2,(A7)
L08620 RTS
; --------------------------------------------------------------
; A3 contains pointer to Buffer with name , D5 contains length
; of name.
; A2 contains pointer to table to compare with this routine
; checks the name in buffer, and put it into the name list.
; return address of name table in A2
; --------------------------------------------------------------
L08622:
MOVE.L A2,-(A7) ;save address of table to
;compare with
MOVE.B D5,D2 ;length of name -> D2
MOVE.B D2,D1 ;once more the length of
;the name
MOVEQ #5,D3 ;bit to clear for capital
;letters
MOVEA.L BV_NTBAS(A6),A2 ;base of name table
MOVEA.L A3,A1 ;pointer to buffer with
;name -> A1
L08630 CMPA.L BV_NTP(A6),A2 ;top of name table
BGE.S L08684 ;if end of name table
TST.L 0(A6,A2.L) ;what is this
BEQ.S L0864C ;can not be the same name
MOVEA.L BV_NLBAS(A6),A4 ;name list
ADDA.W 2(A6,A2.L),A4 ;add pointer to name in
;table
MOVE.B 0(A6,A4.L),D5 ;get length of name in
;table
CMP.B D2,D5 ;compare it with the length
;of the name in buffer
BEQ.S L08650 ;length is the same, so
;test the rest
L0864C ADDQ.W #8,A2 ;try next name pointer
BRA.S L08630
L08650 ; compare name in buffer (A3/A1) with name in name
; table (A2)
TST.B D2 ;have we checked all bytes
;in the buffer ?
BEQ.S L08672 ;end of name in buffer
MOVE.B 0(A6,A3.L),D4 ;next byte of name in
;buffer -> D4
ADDQ.W #1,A3 ;increment pointer in
;buffer
BCLR D3,D4 ;capital letters only
TST.B D5 ;have we checked all bytes
;in the name list ?
BEQ.S L0867C ;end of name in list => not
;the same name
ADDQ.W #1,A4 ;increment pointer in name
;list
MOVE.B 0(A6,A4.L),D6 ;next byte of name in list
;-> D6
BCLR D3,D6 ;cabital letters only
CMP.B D4,D6 ;are the bytes of buffer
;and name list equal
BNE.S L0867C ;not the same name
SUBQ.B #1,D2 ;decrement number of bytes
;in buffer
SUBQ.B #1,D5 ;decrement number of bytes
;in name list
BRA.S L08650 ;continue comparision
L08672:
TST.B D5 ;is the the name in the
;name list complete ?
BNE.S L0867C ;no => the name are not
;identical
FOUND_x:
MOVE.L A2,D5 ;pointer to name table
;entry -> D5 !!!!
ADDQ.W #4,A7 ;clean up stack
BRA.S L086FA ;return with success
L0867C:
MOVEA.L A1,A3 ;restore pointer to name in
;buffer
MOVE.B D1,D2 ;restore length of name in
;buffer
ADDQ.W #8,A2 ;try next name table entry
BRA.S L08630 ;continue searching
; name not found in name list , so try list supplyed in (A7)
L08684:
MOVEQ #0,D6
MOVEA.L A3,A0 ;pointer to name in buffer
MOVEA.L (A7)+,A2 ;pointer to second list
JSR L08966(PC) ;*/undomodify BSR L08966
;try to find name there
BRA.S L08692 ;name not found
BRA.S L08704 ;name found
L08692:
TST.B BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
BEQ.S L0869E
ADDQ.W #8,A7
JMP L0848E(PC) ;*/undomodify BRA L0848E
L0869E ; write new name into name list, start entry into name
; table
MOVEQ #0,D4
MOVE.B D2,D4
JSR L04DE8(PC) ;*/undomodify BSR L04DE8
;reserve memory for name
;table entry
MOVE.L D4,D2
MOVE.L #-1,4(A6,A2.L) ;initialize address of
;routine
MOVEA.L BV_NLP(A6),A4 ;name list running pointer
MOVE.L A4,D3
SUB.L BV_NLBAS(A6),D3 ;name list
MOVE.W D3,2(A6,A2.L) ;store pointer to name list
ADD.L A3,D2
MOVE.B -1(A6,D2.L),D3
MOVEQ #0,D1
SUBI.B #'%',D3 ;integer ?
BLT.S L086D2 ;$ string
BGT.S L086D0 ;nothing -> floatimg point
ADDQ.W #1,D1 ;% integer
L086D0 ADDQ.W #1,D1
L086D2 ADDQ.W #1,D1
MOVE.W D1,0(A6,A2.L) ;store type
MOVE.L A2,D5 ;Store name table pointer
MOVEQ #1,D1
ADD.W D4,D1
JSR L04E72(PC) ;*/undomodify BSR L04E72
MOVE.B D4,0(A6,A4.L) ;length of name
L086E6 ADDQ.W #1,A4 ;copy name to name list
MOVE.B 0(A6,A3.L),0(A6,A4.L)
ADDQ.W #1,A3
SUBQ.B #1,D4
BNE.S L086E6 ;continue copy
ADDQ.W #1,A4
MOVE.L A4,BV_NLP(A6) ;name list running pointer
L086FA MOVEA.L D5,A2 ;store pointer to name
;table entry
SUB.L BV_NTBAS(A6),D5 ;name table
LSR.L #3,D5 ;calculate number of entry
;-> D5
ADDQ.L #2,(A7) ;return with success
L08704 RTS
; ------------------------------------------------
L08706 BSR.S L0872C
BNE.S L0872A
CMPI.B #1,D2
BNE.S L0872A
L08710 ADDQ.W #1,A0
BSR.S L0872C
BEQ.S L08710
CMPI.B #$24,D2
BEQ.S L08722
CMPI.B #$25,D2
BNE.S L08728
L08722 TST.B D3
BNE.S L0872A
ADDQ.W #1,A0
L08728 ADDQ.L #2,(A7)
L0872A RTS
L0872C MOVEQ #0,D1
MOVE.B 0(A6,A0.L),D1
BLT.S L08746
LEA L03C28(PC),A1 ;table defines type of
;ASCII code
MOVE.B 0(A1,D1.W),D2
CMPI.B #1,D2
BEQ.S L08746
CMPI.B #2,D2
L08746 RTS
L08748 MOVE.L A0,-(A7)
MOVEQ #0,D5
L0874C MOVEA.L (A7),A0
BSR.S L08794
L08750 ADDQ.W #1,D5
MOVEA.L A2,A1
CMP.B (A1),D5
BGT.S L08790
MOVEQ #0,D1
MOVE.B 0(A1,D5.W),D1
ADDA.W D1,A1
MOVE.B (A1)+,D1
CMP.B (A1)+,D0
BNE.S L08750
MOVE.B D1,D0
SWAP D1
MOVE.B D0,D1
ANDI.B #$0F,D1
L08770 SUBQ.B #1,D1
BLE.S L0877E
ADDQ.W #1,A0
BSR.S L08794
CMP.B (A1)+,D0
BEQ.S L08770
BRA.S L0874C
L0877E:
SWAP D1
LSR.B #4,D1
ADDQ.W #1,A0
BEQ.S L0878C
JSR L0872C(PC) ;*/undomodify BSR.S L0872C
;*/undomodify nop
BEQ.S L0874C
L0878C:
ADDQ.L #2,4(A7)
L08790:
ADDQ.W #4,A7
RTS
L08794 MOVEQ #0,D0
MOVE.B 0(A6,A0.L),D0
BLT.S L087AC
LEA L03C28(PC),A3 ;table defines type of
;ASCII code
CMPI.B #1,0(A3,D0.W)
BNE.S L087AC
BCLR #5,D0
L087AC RTS
L087AE:
DC.W L084CE-L087C4
DC.W L0860C-L087C4
DC.W L0860C-L087C4
DC.W L04FFC-L087C4 ;*/undomend DC.W L087AC-...
DC.W L08552-L087C4
DC.W L084B6-L087C4
DC.W L08578-L087C4
DC.W L085AC-L087C4
DC.W L085E0-L087C4
DC.W L08474-L087C4
DC.W L084CA-L087C4
L087C4 LSR.B #1,D6
L087C6 JSR L0858C(PC) ;*/undomodify BSR L0858C
ADD.B D6,D6
MOVE.W L087AE-2(PC,D6.W),D6
JMP L087C4(PC,D6.W)
; Basic syntax analyser
ANA_SYNX:
MOVEQ #0,D7
MOVEQ #0,D6
MOVE.L (A2)+,-(A7) ;push instruction table
;(END,FOR,DEFine,...)
MOVE.L (A2),-(A7) ;push command syntax table
MOVEA.L (A7),A5 ;Command syntax table -> A5
MOVE.W (A5),D6 ;get first word (offset)
ADDA.W D6,A5 ;add offset to address
MOVEQ #0,D4
JSR PUSHD4TG(PC) ;*/undomodify BSR PUSHD4TG
;push D4 (=0) on temporary
;stack
MOVEA.L (A6),A0 ;get text line buffer base
BRA.S L0880E
L087EC SUBI.B #$80,D6
LSR.B #1,D6
BNE.S L087FE
SUBQ.W #1,A5
JSR L08A7A(PC) ;*/undomodify BSR L08A7A
BRA L088CE
L087FE MOVE.L A5,D4
JSR PUSHD4TG(PC) ;*/undomodify BSR PUSHD4TG
ADD.B D6,D6
MOVEA.L (A7),A5
MOVE.W -2(A5,D6.W),D6
ADDA.W D6,A5
L0880E JSR L08A7E(PC) ;*/undomodify BSR L08A7E
;push #0 and A0(=text line)
;on backtrack stack
L08812 MOVEQ #0,D6
MOVE.B (A5)+,D6 ;next byte commando syntax
BEQ.S L0887A
BMI.S L087EC
BCLR #6,D6
BEQ.S L0882C
MOVEA.L 4(A7),A2 ;get instruction syntax
;table (END,FOR,DEFine,...)
JSR L08966(PC) ;*/undomodify BSR L08966
BRA.S L08846 ;error
BRA.S L08864
L0882C BCLR #5,D6
BEQ.S L0883A
JSR L08B34(PC) ;*/undomodify BSR L08B34
BRA.S L08846 ;error
BRA.S L08864
L0883A:
MOVEA.L 4(A7),A2 ;get instruction syntax
;table
JSR L087C4(PC) ;*/undomodify BSR.S L087C4
;*/undomodify nop
BRA.S L08846 ;error
BRA.S L08864
L08846:
MOVEA.L BV_BTP(A6),A2 ;backtrack stack
;during parsing
L0884A MOVEA.L 0(A6,A2.L),A3
MOVEA.L 4(A6,A2.L),A0
MOVE.L 8(A6,A2.L),D3
ADDA.W #$0C,A2
BLT.S L0884A
ADDQ.W #1,A5
MOVE.L A3,BV_TKP(A6) ;token list running pointer
BRA.S L08812 ;go on analysing with next
;item
L08864 JSR L08A7A(PC) ;*/undomodify BSR L08A7A
L08868 MOVEQ #0,D6
MOVE.B (A5),D6
BEQ.S L088CE
BMI.S L08874
ADDA.W D6,A5
BRA.S L08812
L08874 NEG.B D6
SUBA.W D6,A5
BRA.S L08812
L0887A MOVEA.L BV_BTP(A6),A4 ;backtrack stack
;during parsing
CMPA.L BV_BTBAS(A6),A4 ;backtrack running pointer
BGT.S L088B2
MOVEA.L 0(A6,A4.L),A3
MOVEA.L 4(A6,A4.L),A0
MOVEA.L 8(A6,A4.L),A5
ADDA.W #$0C,A4
MOVE.L A4,BV_BTP(A6) ;backtrack stack
;during parsing
MOVE.L A5,D3
BGT.S L088A6
BEQ.S L088B8
MOVE.L A0,D4
JSR PUSHD4TG(PC) ;*/undomodify BSR PUSHD4TG
BRA.S L0887A
L088A6 BTST D7,-1(A5)
BEQ.S L08846
MOVE.L -$10(A6,A4.L),D3
BMI.S L08846
L088B2 ADDQ.W #8,A7
MOVEQ #-1,D0 ;Not complete error
RTS
L088B8 MOVEA.L BV_TGP(A6),A4 ;temporary graph stack
;during parsing
MOVEA.L 0(A6,A4.L),A5
ADDQ.W #4,A4
MOVE.L A4,BV_TGP(A6) ;temporary graph stack
;during parsing
MOVE.L A5,D3
BEQ.S L088B2
BRA L08846
L088CE JSR L04E52(PC) ;*/undomodify BSR L04E52
;reserve 12 byte on
;arith stack
MOVEA.L BV_BTP(A6),A4 ;backtrack stack
;during parsing
MOVEA.L BV_TGP(A6),A2 ;temporary graph stack
;during parsing
SUBQ.W #8,A4
MOVE.L #-1,4(A6,A4.L)
MOVE.L 0(A6,A2.L),0(A6,A4.L)
MOVEA.L 0(A6,A4.L),A5
SUBQ.W #4,A4
MOVE.L BV_TKP(A6),0(A6,A4.L) ;token list running ptr
ADDQ.W #4,A2
MOVE.L A2,BV_TGP(A6) ;temporary graph stack
;during parsing
MOVE.L A4,BV_BTP(A6) ;backtrack stack
;during parsing
MOVE.L A5,D3
BNE L08868
ADDQ.W #8,A7
MOVEQ #0,D0
RTS
INI_STCK ; Imitialize BASIC stacks
MOVE.L BV_BTBAS(A6),BV_BTP(A6) ;backtrack running ptr
MOVE.L BV_TGBAS(A6),BV_TGP(A6) ;graph stack running ptr
MOVE.L BV_TKBAS(A6),BV_TKP(A6) ;token list
MOVEQ #$7E,D1
JSR L04E6E(PC) ;*/undomodify BSR L04E6E
MOVEQ #$20,D1
JSR BV_CHRIX(PC) ;*/undomodify BSR BV_CHRIX
MOVE.L BV_RIP(A6),BV_TGBAS(A6) ;arith stack
SUBI.L #$20,BV_TGBAS(A6) ;graph stack running ptr
MOVE.L BV_TGBAS(A6),BV_TGP(A6) ;graph stack running ptr
MOVEQ #$50,D1
JSR L04E5A(PC) ;*/undomodify BSR L04E5A
MOVE.L BV_TGP(A6),BV_BTBAS(A6) ;temporary graph stack
;during parsing
SUBI.L #$50,BV_BTBAS(A6) ;backtrack running pointer
MOVE.L BV_BTBAS(A6),BV_BTP(A6) ;backtrack running ptr
MOVEQ #0,D0
JSR L04E32(PC) ;*/undomodify BSR L04E32
;allocate memory
MOVE.W #$0200,D1
JMP L04E54(PC) ;*/undomodify BRA L04E54
L08966:
MOVEM.L D0-D5/A1-A5,-(A7)
MOVEA.L A2,A3
MOVEA.L A0,A1
MOVEQ #0,D3
MOVEQ #0,D4
MOVEQ #0,D5
MOVEQ #0,D0
LSR.B #1,D6
BEQ.S L08980
JSR L0858C(PC) ;*/undomodify BSR L0858C
BRA.S L08986
L08980 ST D0
SWAP D0
MOVEQ #1,D6
L08986 MOVEQ #0,D1
CMP.B (A2),D6
BGT L08A48
MOVE.B 0(A2,D6.W),D1
ADDA.L D1,A2
MOVE.B (A2)+,D1
ROR.L #4,D1
MOVE.B D1,D4
SWAP D1
ROL.W #4,D1
MOVE.B D1,D3
L089A0 SUBQ.B #1,D4
BLT.S L089FC
MOVE.B (A2)+,D2
CMPI.B #$60,D2
BGT.S L089B2
ST D0
SF D5
BRA.S L089BC
L089B2 SF D0
TST.B D5
BNE.S L089A0
SUBI.B #$20,D2
L089BC MOVE.B 0(A6,A0.L),D1
ADDQ.W #1,A0
CMPI.B #$60,D1
BLE.S L089CC
SUBI.B #$20,D1
L089CC CMP.B D2,D1
BEQ.S L089A0
TST.B D0
BNE.S L089DA
ST D5
SUBQ.W #1,A0
BRA.S L089A0
L089DA SWAP D0
TST.B D0
BEQ.S L08A48
SWAP D5
TST.B D5
SWAP D5
BEQ.S L089EC
TST.B D3
BNE.S L089F4
L089EC ADDQ.W #1,D6
MOVEA.L A1,A0
MOVEA.L A3,A2
BRA.S L08986
L089F4 MOVEA.L A4,A0
SUBQ.B #1,D3
ADDA.L D4,A2
BRA.S L08A30
L089FC SWAP D0
TST.B D0
BEQ.S L08A38
MOVE.B 0(A6,A0.L),D1
BLT.S L08A48
LEA L03C28(PC),A5 ;table defines type of
;ASCII code
CMPI.B #$01,0(A5,D1.W)
BEQ.S L08A1E
CMPI.B #$02,0(A5,D1.W)
BEQ.S L08A48
BRA.S L08A40
L08A1E SWAP D5
TST.B D5
BNE.S L08A48
TST.B D3
BEQ.S L08A48
ST D5
SWAP D5
SUBQ.B #1,D3
MOVEA.L A0,A4
L08A30 MOVE.B (A2)+,D4
LSR.B #4,D4
BRA L089A0
L08A38 MOVEQ #-$7F,D4
MOVE.B D6,D5
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
L08A40 MOVEM.L (A7)+,D0-D5/A1-A5
ADDQ.L #2,(A7)
RTS
L08A48 MOVEM.L (A7)+,D0-D5/A1-A5
RTS
COMP_ERR ; error when compiling
MOVE.L BV_TKBAS(A6),BV_TKP(A6) ;token list
MOVEA.L (A6),A0
JSR L08474(PC) ;*/undomodify BSR L08474
BRA.S L08A76 ;error
MOVEQ #-$7F,D4 ;error
MOVEQ #$1F,D5
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
JSR L085F2(PC) ;*/undomodify BSR L085F2
;success
BRA.S L08A76
MOVEQ #-$7C,D4
MOVEQ #$0A,D5
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
MOVEQ #0,D0
RTS
L08A76 MOVEQ #-21,D0 ;Bad line error
RTS
L08A7A MOVE.L A5,D4
BRA.S L08A80
L08A7E MOVEQ #0,D4
L08A80 JSR L04E52(PC) ;*/undomodify BSR L04E52
;reserve 12 byte on
;arith stack
MOVEA.L BV_BTP(A6),A4 ;backtrack stack
;during parsing
SUBA.W #$0C,A4
MOVE.L D4,8(A6,A4.L) ;push D4 on Backtrack stack
MOVE.L A0,4(A6,A4.L) ;push A0 on Backtrack stack
MOVE.L BV_TKP(A6),0(A6,A4.L) ;token list running ptr
MOVE.L A4,BV_BTP(A6) ;backtrack stack
;during parsing
RTS
PUSHD4TG:
JSR L04E58(PC) ;*/undomodify BSR L04E58
;reserve 4 bytes on
;arith stack
MOVEA.L BV_TGP(A6),A4 ;temporary graph stack
;during parsing
SUBQ.W #4,A4
MOVE.L D4,0(A6,A4.L) ;put D4 on stack
MOVE.L A4,BV_TGP(A6) ;temporary graph stack
;during parsing
RTS
; --------------------------------------------------------------
; Format precompiled BASIC line. The line has to be tokenized
; and starts from 8(A6) and ends at $C(A6)
; --------------------------------------------------------------
FMT_LINE:
MOVEA.L 8(A6),A0 ;token list
L08AB8 CMPA.L BV_TKP(A6),A0 ;token list running pointer
BGE.S L08ADA ;end of list ?
CMPI.B #$81,0(A6,A0.L) ;Search for non keyword
;token in token list
BNE.S L08ACC
ADDQ.W #2,A0
BSR.S GO_SPACE
BRA.S L08AB8
L08ACC CMPI.W #$8409,0(A6,A0.L) ;symbol 9 = ?
ADDQ.W #2,A0
BNE.S L08AB8
BSR.S L08B10 ;remove item from token
;list
BRA.S L08AB8
L08ADA MOVEA.L BV_TKBAS(A6),A0 ;token list
CMPI.B #$80,0(A6,A0.L) ;space token
BNE.S L08AEA
ADDQ.W #2,A0
BSR.S L08B10 ;remove space from token
;list
L08AEA CMPI.W #$8D00,0(A6,A0.L) ;line # ?
BNE.S L08B0E ;return
ADDQ.W #4,A0
GO_SPACE ; remove waste spaces
CMPI.B #$80,0(A6,A0.L) ;space token ?
BNE.S L08B0E ;no -> return
MOVE.B 1(A6,A0.L),D1
ADDQ.W #2,A0 ;next token
SUBQ.B #1,D1
BGT.S L08B0A
BSR.S L08B10 ;remove space from token
;list
BRA.S L08B0E
L08B0A MOVE.B D1,-1(A6,A0.L) ;really neccessary
;??????????? <----
L08B0E RTS
; remove last item from token list
L08B10 LEA -2(A0),A2 ;old value of token list
;pointer before inc.
L08B14 MOVE.W 0(A6,A0.L),-2(A6,A0.L)
ADDQ.W #2,A0
CMPA.L BV_TKP(A6),A0 ;token list running pointer
BLT.S L08B14
SUBQ.L #2,BV_TKP(A6) ;token list running pointer
MOVEA.L A2,A0
RTS
; NOW SEPERATORS =:#,(){} SPACE AND CR
; THIS WAS INTERPRETED AS CODE !!! CORRECTED
L08B2A DC.L $3D3A232C
DC.L $28297B7D
DC.W $200A
L08B34 LSR.B #1,D6
L08B36 MOVE.B 0(A6,A0.L),D1
CMP.B L08B2A-1(PC,D6.W),D1
BEQ.S L08B4C
CMPI.B #$20,D1
BNE.S L08B58
JSR L0858C(PC) ;*/undomodify BSR L0858C
BRA.S L08B36
L08B4C ADDQ.W #1,A0
MOVEQ #-$7C,D4
MOVE.B D6,D5
JSR L08DFA(PC) ;*/undomodify BSR L08DFA
ADDQ.L #2,(A7)
L08B58 RTS
TB_LIST:
DC.L L08D2B-ORG0
DC.L COM_SYNX-ORG0
COM_SYNX ; Command syntax table
DC.L $0022004E,$00AE0060
DC.L $006600BC,$00C400E3,$00FA0163,$01780185
DC.L $019901A2,$01B001BD,$01BE1401,$840F8A12
DC.L $861E8809,$68F98C05,$90039201,$25F13500
DC.L $00780625,$EA350000,$33E525E3,$35000035
DC.L $0025018E,$DA004E02,$00500452,$02003202
DC.L $00020200,$80940000,$44084812,$4C164608
DC.L $00320200,$17160033,$02009800,$00320200
DC.L $0200005C,$0A320200,$02190023,$0C008033
DC.L $02009808,$00270900,$960D0080,$28F50098
DC.L $0C00809A,$00007A09,$8028EE00,$8028E700
DC.L $33020098,$F4004A02,$00320200,$6A041600
DC.L $0033FC00,$660A6408,$6C0C6A11,$22150032
DC.L $02000200,$00803202,$00980000,$32020002
DC.L $EC006E00,$96020028,$FC800042,$0200480D
DC.L $440B4600,$4A004C00,$4E020080,$32020002
DC.L $00006216,$704D7219,$74217C2B,$7E29542A
DC.L $6A337649,$9E4D0251
DC.W $0080
L08C74 DC.L $32020098,$00003202,$009C0200,$28FC8000
DC.L $32020002,$049C0200,$28FA8000,$12000056
DC.L $04580200,$32020098,$00003202,$00980200
DC.L $54020056,$04580200,$33020098,$020028FC
DC.L $80003202,$009E0200,$22020098,$0000A000
DC.L $002B0200,$02042B07,$0028FA2D,$00000202
DC.L $0028FC2D,$F7009802,$00560380,$00320200
DC.B $98,$00,$00
EXP_SYNX ; Expression syntax table
DC.B $0C,$01,$2A,$08,$10
DC.L $0C040C02,$08009802
DC.L $002C0400,$2A05800A,$EB00A202,$002CF600
DC.L $0202002A,$02009802,$0028FC2C,$00000202
DC.L $00802A02,$00A20200,$2CF80080,$0EFE2601
DC.L $9802000E
DC.B $F7,$80,$00
L08D2B ; Base of instruction list
DC.B $1F
DC.L $2024282B
DC.W $3239
DC.L $3E454F58
DC.L $5B5E6267
DC.L $6D71777F
DC.L $84898E91
DC.L $98A2A7AB
DC.L $B1B5BABF
DC.W $C636
DC.B 'END',$30,'FOR'
DC.B $20,'IF',$60,'REPeat'
DC.B $60,'SELect',$40,'WHEN'
DC.B $62,'DEFine',$90,'PROCedure'
DC.B $80,'FuNction',$22,'GO TO'
DC.B $30,'SUB',$41,'WHEN',$50,'ERRor'
DC.B $30,'END',$50,'ERRor',$70,'RESTORE'
L08DAA DC.B $40,'NEXT',$40,'EXIT',$40,'ELSE'
DC.B $20,'ON',$60,'RETurn'
DC.B $90,'REMAINDER',$40,'DATA'
DC.B $30,'DIM',$50,'LOCal'
DC.B $30,'LET',$40,'THEN',$40,'STEP'
DC.B $60,'REMark',$70,'MISTake',$00
L08DFA MOVEQ #2,D1
BSR.S L08E68
MOVE.B D4,0(A6,A3.L)
MOVE.B D5,1(A6,A3.L)
ADDQ.W #2,A3
BRA.S L08E5E
L08E0A MOVEQ #$04,D1
MOVEQ #0,D2
BSR.S L08E76
L08E10 BRA.S L08E5E
L08E12 MOVEQ #$06,D1
L08E14 MOVE.L A1,BV_RIP(A6) ;arith stack
BSR.S L08E68
MOVEA.L $0058(A6),A1 ;arith stack
ADDQ.L #6,BV_RIP(A6) ;arith stack
MOVE.W 0(A6,A1.L),D2
ADDI.W #$F000,D2
MOVE.W D2,0(A6,A3.L)
MOVE.L 2(A6,A1.L),2(A6,A3.L)
ADDQ.W #6,A3
BRA.S L08E5E
L08E38 MOVEQ #1,D1
ADD.W D5,D1
BVS.S L08E64
L08E3E ADDQ.W #4,D1
BSR.S L08E76
BEQ.S L08E5E
MOVE.W D5,D1
L08E46 MOVE.B 0(A6,A2.L),0(A6,A3.L)
ADDQ.W #1,A3
ADDQ.W #1,A2
SUBQ.W #1,D1
BNE.S L08E46
BTST D7,D5
BEQ.S L08E5E
MOVE.B D7,0(A6,A3.L)
ADDQ.W #1,A3
L08E5E MOVE.L A3,BV_TKP(A6) ;token list running pointer
L08E62 RTS
L08E64 ADDQ.W #4,A7
RTS
L08E68 MOVE.B D2,-(A7)
JSR L04E6E(PC) ;*/undomodify BSR L04E6E
MOVE.B (A7)+,D2
MOVEA.L BV_TKP(A6),A3 ;token list running pointer
RTS
L08E76 BSR.S L08E68
MOVE.B D4,0(A6,A3.L)
MOVE.B D2,1(A6,A3.L)
MOVE.W D5,2(A6,A3.L)
ADDQ.W #4,A3
RTS
STO_LINE ; Store compiled line
MOVEA.L BV_TKBAS(A6),A1 ;token list
CMPI.B #$8D,0(A6,A1.L)
BNE L08F82
MOVE.W 2(A6,A1.L),D2
MOVE.L BV_TKP(A6),D1 ;token list running pointer
SUB.L A1,D1
SUBQ.W #6,D1
SEQ D0
ADDQ.W #6,D1
MOVEQ #0,D6
MOVEQ #0,D5
MOVEA.L BV_PFBAS(A6),A0 ;program file
MOVEQ #0,D3
BRA.S L08EB6
L08EB2 MOVE.W $02(A6,A0.L),D3
L08EB6 ADD.W D5,D6
ADDA.L D6,A0
MOVE.W 0(A6,A0.L),D5
ADDQ.W #2,A0
CMPA.L BV_PFP(A6),A0 ;program running pointer
BLT.S INS_LINE
ADDQ.B #1,D0
BGT.S L08F44
SUBQ.W #2,A0
BRA.S L08EFE
INS_LINE ; insert new line in prog
CMP.W 2(A6,A0.L),D2
BGT.S L08EB2
BEQ.S L08F00
SUBQ.W #2,A0
TST.B D0
BNE.S L08EFE
ADDQ.W #2,D1
BSR L08F84
BSR.S L08F3A
SUBQ.W #2,D1
MOVE.W D1,D5
SUB.W D6,D5
MOVE.W D5,0(A6,A0.L)
MOVEQ #$01,D0
L08EF0 BSR L08F92
ADD.W 0(A6,A0.L),D6
SUB.W D1,D6
MOVE.W D6,0(A6,A0.L)
L08EFE BRA.S L08F5C
L08F00 ; replace existing line in prog
TST.B D0
BEQ.S L08F06
MOVEQ #-$02,D1
L08F06 ADD.W D6,D5
LEA -$0002(A0),A3
ADDA.L D5,A0
CMPA.L BV_PFP(A6),A0 ;program running pointer
BGE.S L08F3C
SUB.W D5,D1
BLT.S L08F1A
BSR.S L08F84
L08F1A BSR.S L08F3A
MOVEA.L A3,A0
ADD.W D5,D1
BGT.S L08F2E
ADD.W 0(A6,A0.L),D5
SUB.W D6,D5
MOVE.W D5,0(A6,A0.L)
BRA.S L08F5C
L08F2E MOVE.W D1,D4
SUB.W D6,D4
MOVE.W D4,0(A6,A0.L)
MOVE.W D5,D6
BRA.S L08EF0
L08F3A BRA.S L08FA6
L08F3C LEA 2(A3),A0
MOVE.L A3,BV_PFP(A6) ;program running pointer
L08F44 SUBQ.W #2,A0
TST.B D0
BLT.S L08F5C
ADDQ.W #2,D1
BSR.S L08F84
SUBQ.W #2,D1
SUB.W D6,D1
MOVE.W D1,0(A6,A0.L)
BSR.S L08F92
MOVE.L A0,BV_PFP(A6) ;program running pointer
L08F5C TST.B $00B9(A6)
BEQ.S L08F80
SF BV_AUTO(A6) ;Whether AUTO/EDIT
;is on ($FF) or off (0)
BGT.S L08F70
MOVE.W D3,BV_EDLIN(A6) ;Line # to edit next
BNE.S L08F7C
BRA.S L08F80
L08F70 CMPA.L BV_PFP(A6),A0 ;program running pointer
BGE.S L08F7C
MOVE.W $04(A6,A0.L),BV_EDLIN(A6) ;Line # to
;edit next
L08F7C ST BV_AUTO(A6) ;Whether AUTO/EDIT
;is on ($FF) or off (0)
L08F80 ADDQ.L #2,(A7)
L08F82 RTS
L08F84 MOVEM.L D0-D3/A0-A3,-(A7)
JSR L04E82(PC) ;*/undomodify BSR L04E82
MOVEM.L (A7)+,D0-D3/A0-A3
RTS
L08F92 ADDQ.W #2,A0
MOVE.W 0(A6,A1.L),0(A6,A0.L)
ADDQ.W #2,A1
CMPA.L BV_TKP(A6),A1 ;token list running pointer
BLT.S L08F92
ADDQ.W #2,A0
RTS
L08FA6 MOVEM.L D0-D3/A0-A3,-(A7)
EXT.L D1
TST.L D1
BEQ.S L08FE0
MOVEA.L BV_PFP(A6),A1 ;program running pointer
BLT.S L08FCA
LEA 0(A1,D1.W),A2
L08FBA SUBQ.W #2,A1
SUBQ.W #2,A2
MOVE.W 0(A6,A1.L),0(A6,A2.L)
CMPA.L A0,A1
BGT.S L08FBA
BRA.S L08FDC
L08FCA LEA 0(A0,D1.W),A2
L08FCE MOVE.W 0(A6,A0.L),0(A6,A2.L)
ADDQ.W #2,A0
ADDQ.W #2,A2
CMPA.L A1,A0
BLT.S L08FCE
L08FDC ADD.L D1,BV_PFP(A6) ;program running pointer
L08FE0 MOVEM.L (A7)+,D0-D3/A0-A3
RTS
L08FE6 ST BV_PRINT(A6) ;Print from prtok ($ff)
;or leave in buffer
MOVEA.L BV_LNBAS(A6),A1 ;line # table
MOVE.L BV_LNP(A6),D0 ;line # running ptr
SUB.L A1,D0
BNE.S L09000
MOVE.W D2,D4
BEQ.S L09060
MOVE.W D2,D6
BRA.S L09044
L08FFE MOVE.W D4,D2
L09000 MOVE.W 0(A6,A1.L),D4
TST.W D2
BEQ.S L08FFE
MOVE.W BV_LSBAS(A6),D6 ;Bottom line in window
CMP.W BV_LSBEF(A6),D2 ;Invisible top line
BLT.S L09060
CMP.W D4,D2
BLT.S L09032
CMP.W BV_LSAFT(A6),D2 ;Invisible bottom line
BGT.S L09060
CMP.W D6,D2
BGT.S L0902A
TST.B D5
BGE.S L09044
MOVE.W BV_LSAFT(A6),D6 ;Invisible bottom line
BRA.S L09044
L0902A TST.B D5
BLT.S L09060
MOVE.W D2,D6
BRA.S L09044
L09032 TST.B D5
BLT.S L09060
MOVE.W D2,D4
MOVE.W BV_MAXLN(A6),D0 ;Max. number of window lines
SUB.W BV_TOTLN(A6),D0 ;Number of window line so far
BGT.S L09044
SUBQ.W #1,D6
L09044 MOVE.W D2,BV_LSFIL(A6) ;fill window when
;relisting up to here
MOVEQ #$10,D0 ;SD.POS position cursor at
;row, column (char)
MOVEQ #0,D2
MOVEQ #0,D1
BSR.S L0905C
MOVEQ #0,D7
JSR TKN_LIST(PC) ;*/undomodify BSR TKN_LIST
MOVEQ #$24,D0 ;clears right hand end of
;cursor line
BSR.S L0905C
MOVEQ #$22,D0 ;Clears bottom of window
L0905C MOVEQ #-1,D3
TRAP #3
L09060 RTS
L09062:
DC.L $02020404,$02020204,$040204FB,$FB040200
L09072:
MOVEQ #0,D0
MOVEQ #6,D1
MOVE.B 0(A6,A4.L),D0
BEQ.S L09098
SUBI.B #$80,D0
CMPI.B #$70,D0
BGE.S L09096
MOVE.B L09062(PC,D0.W),D1
BGE.S L09096
NEG.B D1
ADD.W 2(A6,A4.L),D1
BCLR #0,D1
L09096 ADDA.L D1,A4
L09098 MOVE.B 0(A6,A4.L),D0
MOVE.W 0(A6,A4.L),D1
RTS
L090A2 MOVE.L A1,-(A7)
MOVEA.L BV_CHBAS(A6),A1 ;channel name
ADDA.W #$50,A1
MOVE.L 0(A6,A1.L),D0
SUB.L A0,D0
MOVEA.L (A7)+,A1
RTS
L090B6:
MOVE.L A5,-(A7)
MOVEA.L A0,A5
BSR.S L090A2
SEQ $9B(A6) ;whether checking list
;($FF) or not (0)
BNE.S L09108
MOVEQ #$0B,D0 ;get window size and cursor
;position
LEA $A2(A6),A1 ;length of window line
MOVEQ #-1,D3
TRAP #3
MOVE.L BV_LNBAS(A6),BV_LNP(A6) ;line # table ->
;running pointer
CLR.W BV_TOTLN(A6) ;number of window lines so far
MOVEQ #$64,D1
;*/undoinsert MOVEQ #$44,D2
JSR L04E7E(PC) ;*/undomodify BSR L04E7E
;*/undomodify BSR L04E84
MOVE.W BV_LINUM(A6),BV_LSBEF(A6) ;Current line # ->
;invisible top line
MOVE.W #$7FFF,BV_LSAFT(A6) ;Invisible bottom line
BRA.S L09108
L090EA:
DC.W L092F8-L090EA
DC.W L09314-L090EA
DC.W L09292-L090EA
DC.W L09292-L090EA
DC.W L09338-L090EA
DC.W L0930E-L090EA
DC.W L0931A-L090EA
DC.W L09292-L090EA
DC.W L0929C-L090EA
DC.W L09292-L090EA
DC.W L09292-L090EA
DC.W L092E2-L090EA
DC.W L092EC-L090EA
DC.W L09238-L090EA
DC.W L09308-L090EA
L09108 MOVE.L (A2),-(A7)
ADDQ.W #2,A4
MOVEQ #0,D4
MOVE.B #$8D,D4
L09112 MOVE.L (A6),4(A6) ;Buffer base -> buffer
;running pointer
L09116 CMPA.L BV_PFP(A6),A4 ;program running pointer
BLT.S L09130
TST.B BV_PRINT(A6) ;Print from prtok ($ff)
;or leave in buffer
BNE L09202
TST.B BV_AUTO(A6) ;Whether AUTO/EDIT
;is on ($FF) or off (0)
BEQ L09202
BSR L09250
L09130 MOVEQ #$10,D1
BSR L092C0
MOVEA.L (A7),A1
SUBI.B #$80,D4
CMPI.B #$70,D4
BGE L091F2
ADD.B D4,D4
MOVE.W L090EA(PC,D4.W),D4
JSR L090EA(PC,D4.W)
CMPI.B #$8D,D4
BNE L091F4
TST.B BV_PRINT(A6) ;Print from prtok ($ff)
;or leave in buffer
BEQ L091FE
TST.B BV_LSANY(A6) ;Whether checking
;list ($ff) or not (0)
BEQ.S L091B8
MOVEA.L (A6),A1
MOVE.L BV_BFP(A6),D2 ;buffer running pointer
SUB.L A1,D2
MOVEA.L BV_LNP(A6),A2 ;line # running ptr
MOVE.W BV_LSBAS(A6),0(A6,A2.L) ;Bottom line in window
SUBQ.W #2,D2
DIVU BV_LENLN(A6),D2 ;Length of window line
ADDQ.W #1,D2
MOVE.W D2,2(A6,A2.L)
ADD.W BV_TOTLN(A6),D2 ;Number of window line so far
L09186 CMP.W BV_MAXLN(A6),D2 ;Max. number of window lines
BLE.S L091AC
MOVE.W BV_LSFIL(A6),D0
BEQ.S L09198
CMP.W BV_LSBAS(A6),D0 ;Bottom line in window
BLT.S L091E4
L09198 MOVEA.L BV_LNBAS(A6),A2 ;line # table
SUB.W 2(A6,A2.L),D2
MOVE.W 0(A6,A2.L),BV_LSBEF(A6) ;Invisible top line
ADDQ.L #4,BV_LNBAS(A6) ;line # table
BRA.S L09186
L091AC MOVE.W D2,BV_TOTLN(A6) ;Number of window line so far
ADDQ.L #4,BV_LNP(A6) ;line # running ptr
JSR L04F9E(PC) ;*/undomodify BSR L04F9E
L091B8:
MOVEQ #IO.SSTRG,D0 ;send a string of bytes
MOVEA.L (A6),A1 ;string to be send
MOVE.L 4(A6),D2 ;number of bytes
SUB.L A1,D2
MOVEA.L A5,A0
MOVEQ #-1,D3
TRAP #4
TRAP #3
TST.L D0
BNE.S L09204
; --------------------------------------------------------------
*/beginoverlay
ifd NoTas
;*/remove MOVE.L D1,D2
;*/note could be dangerous?
MOVEQ #$24,D0 ;SD.CLRRT clears right hand
;end of cursor line
TRAP #3
BSET #7,BV_BRK(A6) ;*/mend TAS BV_BRK(A6)
;There has been a
;break (0) or not ($80)
endc
;
ifnd NoTas
;
MOVE.L D1,D2
MOVEQ #$24,D0
TRAP #3
TAS BV_BRK(A6)
;
endc
*/endoverlay
; --------------------------------------------------------------
BNE L09112
MOVE.W BV_LSBAS(A6),BV_LSAFT(A6) ;windows last line
BRA.S L09202
L091E4:
MOVE.W BV_LSBAS(A6),BV_LSAFT(A6) ;windows last line
MOVE.W -$04(A6,A2.L),BV_LSBAS(A6)
BRA.S L09202
L091F2 BSR.S L09216
L091F4 JSR L09072(PC) ;*/undomodify BSR L09072
MOVE.W D0,D4
BRA L09116
L091FE SUBQ.L #1,4(A6)
L09202 MOVEQ #0,D0
L09204 ADDQ.W #4,A7
MOVEA.L A5,A0
MOVEA.L (A7)+,A5
RTS
L0920C JSR L04E4C(PC) ;*/undomodify BSR L04E4C
MOVEA.L $0058(A6),A1 ;arith stack
RTS
L09216 BSR.S L0920C
MOVE.W 0(A6,A4.L),D2
SUBI.W #$F000,D2
SUBQ.W #6,A1
MOVE.W D2,0(A6,A1.L)
MOVE.L 2(A6,A4.L),2(A6,A1.L)
MOVEA.L 4(A6),A0
JSR CN_FTOD(PC) ;*/undomodify BSR CN_FTOD
BRA L09364
L09238:
BSR.S L0920C
MOVE.W $02(A6,A4.L),D1
TST.B BV_PRINT(A6) ;Print from prtok ($ff)
;or leave in buffer
BNE.S L0925C
TST.B BV_AUTO(A6) ;Whether AUTO/EDIT
;is on ($FF) or off (0)
BEQ.S L0925C
CMP.W BV_EDLIN(A6),D1 ;line # to edit next
BEQ.S L0925C
L09250 BSR.S L0920C
MOVE.W BV_EDLIN(A6),D1 ;line # to edit next
BSR.S L09276
L09258 ADDQ.W #4,A7
BRA.S L09202
L0925C TST.B BV_LSANY(A6) ;Whether checking
;list ($ff) or not (0)
BEQ.S L09288
CMP.W D6,D1
BLE.S L09272
TST.W BV_LSFIL(A6)
BNE.S L09272
MOVE.W D1,BV_LSAFT(A6) ;Invisible bottom line
BRA.S L09258
L09272 MOVE.W D1,BV_LSBAS(A6) ;Bottom line in window
L09276 SUBQ.W #2,A1
MOVE.W D1,0(A6,A1.L)
MOVEA.L BV_BFP(A6),A0 ;buffer running pointer
JSR CN_ITOD(PC) ;*/undomodify BSR CN_ITOD
BRA L09316
L09288 CMP.W D6,D1
BGT.S L09258
BRA.S L09276
L0928E DC.W $3F3F,$3F3F
L09292:
MOVEQ #4,D1
LEA L0928E(PC),A1
BRA L0935A
L0929C:
MOVE.W 2(A6,A4.L),D2
LSL.L #3,D2
MOVEA.L BV_NTBAS(A6),A1 ;name table
ADDA.W D2,A1
MOVE.W 2(A6,A1.L),D2
BLT.S L09292
MOVEA.L BV_NLBAS(A6),A1 ;name list
ADDA.W D2,A1
MOVEQ #0,D1
MOVE.B 0(A6,A1.L),D1
ADDQ.W #1,A1
BRA L09354
L092C0 SUBA.L BV_PFBAS(A6),A4 ;program file
SUBA.L BV_PFBAS(A6),A1 ;program file
MOVEM.L D1/A1/A4,-(A7)
JSR L04E6A(PC) ;*/undomodify BSR L04E6A
MOVEA.L 4(A6),A0
MOVEM.L (A7)+,D1/A1/A4
ADDA.L BV_PFBAS(A6),A1 ;program file
ADDA.L BV_PFBAS(A6),A4 ;program file
RTS
L092E2:
BSR.S L092E6
BSR.S L092EC
L092E6 MOVE.B $01(A6,A4.L),D2
BRA.S L0934C
L092EC:
MOVE.W $02(A6,A4.L),D1
BEQ.S L09306
LEA 4(A4),A1
BRA.S L09354
L092F8:
MOVE.B $1(A6,A4.L),D1
BSR.S L092C0
L092FE MOVEQ #$20,D2
BSR.S L0934C
SUBQ.B #1,D1
BGT.S L092FE
L09306 RTS
L09308:
LEA L0936C(PC),A1
BRA.S L0931E
L0930E:
LEA L0938E(PC),A1
BRA.S L0931E
L09314:
BSR.S L0931E
L09316 MOVEQ #$20,D2
BRA.S L0934C
L0931A:
LEA L0937E(PC),A1
L0931E MOVE.B 1(A6,A4.L),D1
MOVE.B 0(A1,D1.W),D1
ADDA.L D1,A1
MOVE.B (A1)+,D1
LSR.L #4,D1
BRA.S L0935A
L0932E ; separators =:#,(){} space CR
DC.W $3D3A,$232C,$2829,$7B7D,$200A
L09338:
MOVE.B $1(A6,A4.L),D1
MOVE.B L0932E-1(PC,D1.W),D2
MOVEQ #0,D4
SUB.B D2,D1
BNE.S L0934C
ADDQ.W #4,A4
MOVE.B #$8D,D4
L0934C MOVE.B D2,0(A6,A0.L)
ADDQ.W #1,A0
BRA.S L09364
L09354 BSR L092C0
ADDA.L A6,A1
L0935A MOVE.B (A1)+,0(A6,A0.L)
ADDQ.W #1,A0
SUBQ.W #1,D1
BGT.S L0935A
L09364 MOVE.L A0,4(A6)
MOVEQ #0,D0
RTS
; ASCII-CODE FOR SEPARATORS
; THERE ARE 5 -EACH BYTE SHOWS DISPLACEMENT
L0936C:
DC.B $05,$06,$08,$0A,$0C,$0E
; HERE THEY ARE - 10 MEANS LENGTH 1
DC.B $10,','
DC.B $10,';',$10,'\'
DC.B $10,'!',$20,'TO',$00
; NEXT LIST OF 4 OPERATORS
L0937E:
DC.B $04,$05,$07,$09,$0C
DC.B $10,'-',$10,'+'
DC.B $20,'~~',$30,'NOT'
* NEXT LIST OF $16 OPERATORS
L0938E:
DC.W $1617,$191B,$1D1F,$2224,$2729,$2C2F,$3134,$373A
DC.W $3C3E,$4145,$494D
DC.B $51
DC.B $10,'+'
DC.B $10,'-'
DC.B $10,'*'
DC.B $10,'/'
DC.B $20,'>='
DC.B $10,'>'
DC.B $20,'=='
DC.B $10,'='
DC.B $20,'<>'
DC.B $20,'<='
DC.B $10,'<'
DC.B $20,'||'
DC.B $20,'&&'
DC.B $20,'^^'
DC.B $10,'^'
DC.B $10,'&'
DC.B $20,'OR'
DC.B $30,'AND'
DC.B $30,'XOR'
DC.B $30,'MOD'
DC.B $30,'DIV'
DC.B $50,'INSTR'
DC.B 0
L093E6 ; create entry in name-table and store value
ANDI.B #$F,1(A6,A2.L)
TST.L 4(A6,A2.L)
BGE.S L093F6
MOVEQ #-12,D0 ;Bad Name error
RTS
L093F6 JSR L04E5E(PC) ;*/undomodify BSR L04E5E
MOVEA.L BV_NTP(A6),A3 ;name table running pointer
ADDQ.L #8,BV_NTP(A6) ;name table
;running pointer
MOVE.W 0(A6,A2.L),0(A6,A3.L)
MOVE.W D4,2(A6,A3.L)
MOVEA.L 4(A6,A2.L),A2
ADDA.L BV_VVBAS(A6),A2 ;variable values
MOVE.W 4(A6,A2.L),D1
LSL.L #2,D1
ADDQ.W #6,D1
JSR L07338(PC) ;*/undomodify BSR L07338
L09420 MOVE.W 0(A6,A2.L),0(A6,A0.L)
ADDQ.W #2,A2
ADDQ.W #2,A0
SUBQ.W #2,D1
BGT.S L09420
L0942E JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8401,D1
BEQ.S L09456
CMPI.W #$8405,D1
BNE L094C2
ADDQ.W #2,A4
MOVEA.L A4,A0
LEA 8(A3),A5
JSR L06272(PC) ;*/undomodify BSR L06272
LEA -8(A5),A3
MOVEA.L A0,A4
BNE.S L0948E
BRA.S L0942E
L09456 ADDQ.W #2,A4
CMPI.B #$02,0(A6,A3.L)
BEQ.S L09478
CMPI.B #$01,$01(A6,A3.L)
BGT.S L094C6
MOVEA.L $04(A6,A3.L),A2
ADDA.L BV_VVBAS(A6),A2 ;variable values
CMPI.W #$0001,$04(A6,A2.L)
BGT.S L094C6
L09478 MOVEA.L A4,A0
MOVE.B $01(A6,A3.L),D0
MOVE.L A3,-(A7)
JSR L05A84(PC) ;*/undomodify BSR L05A84
MOVEA.L (A7)+,A3
MOVEA.L A0,A4
BNE.S L0948E
JSR BP_LET(PC) ;*/undomodify BSR BP_LET
L0948E CMPI.B #$03,0(A6,A3.L)
BNE.S L094AA
MOVEA.L $04(A6,A3.L),A2
ADDA.L BV_VVBAS(A6),A2 ;variable values
MOVE.L D0,-(A7)
MOVE.L A3,-(A7)
JSR L09A3C(PC) ;*/undomodify BSR L09A3C
MOVEA.L (A7)+,A3
MOVE.L (A7)+,D0
L094AA CLR.L 0(A6,A3.L)
CLR.L $04(A6,A3.L)
ADDQ.W #8,A3
CMPA.L BV_NTP(A6),A3 ;name table running pointer
BNE.S L094BE
SUBQ.L #8,BV_NTP(A6) ;name table running pointer
L094BE TST.L D0
RTS
L094C2 MOVEQ #-$11,D0
BRA.S L0948E
L094C6 MOVEQ #-$13,D0
BRA.S L0948E
L094CA:
;*/undoinsert MOVEQ #$16,D1
;*/undoinsert MOVEQ #$3C,D2
;*/undomodify BSR L04E84
JSR L04E64(PC) ;*/undomodify BSR L04E64
MOVEA.L BV_RTP(A6),A5 ;return table running ptr
TST.B D5
BEQ.S L09504
MOVE.L D4,D3
MOVEA.L BV_NTP(A6),A3 ;name table running pointer
MOVE.L A3,0(A6,A5.L)
MOVE.L A3,$04(A6,A5.L)
MOVE.L A3,$08(A6,A5.L)
MOVE.W $04(A6,A2.L),D4
BNE.S L094F2
MOVEQ #-$07,D0
RTS
L094F2 MOVE.W D4,$0C(A6,A5.L)
MOVE.B $01(A6,A2.L),$0E(A6,A5.L)
SF $0F(A6,A5.L)
ADDA.W #$0010,A5
L09504 MOVE.B D5,0(A6,A5.L)
MOVE.B BV_STMNT(A6),$01(A6,A5.L) ;current stmnt on line
MOVE.W BV_LINUM(A6),$02(A6,A5.L) ;current line #
MOVE.L BV_INLIN(A6),$04(A6,A5.L) ;Processing inline clause
ADDQ.W #8,A5
MOVE.L A5,BV_RTP(A6) ;return table running ptr
TST.B D5
BEQ.S L09580
CMPI.B #$03,D5
BEQ.S L09578
MOVEA.L A4,A0
JSR L0614A(PC) ;*/undomodify BSR L0614A
MOVEA.L BV_RTP(A6),A5 ;return table running ptr
MOVE.L BV_NTP(A6),-$14(A6,A5.L) ;name table running ptr
MOVE.L BV_NTP(A6),-$10(A6,A5.L) ;name table running ptr
TST.L D0
BNE.S L09552
MOVE.W 0(A6,A0.L),D1
CMPI.B #$02,D5
BEQ.S L09562
BSR.S L0959E
BEQ.S L09576
L09552 BSR L097C8
SUBI.L #$00000018,BV_RTP(A6) ;return table running ptr
MOVEQ #-$0F,D0
RTS
L09562 CMPI.W #$8406,D1
BNE.S L09552
ADDQ.W #2,A0
SUBA.L BV_TKBAS(A6),A0 ;token list
MOVE.L A0,$0008(A7)
ADDA.L BV_TKBAS(A6),A0 ;token list
L09576 MOVEA.L A0,A4
L09578 ST -$09(A6,A5.L)
MOVEA.L -$18(A6,A5.L),A3
L09580 TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L095A2
BSR.S L0958E
BEQ.S L095A2
MOVEQ #-$07,D0
BRA.S L095B4
L0958E MOVEA.L BV_PFBAS(A6),A4 ;program file
SF BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
CLR.W BV_LENGTH(A6) ;current length
JMP L0A966(PC) ;*/undomodify BRA L0A966
L0959E BRA L09686
L095A2 TST.B D5
BEQ L0A078
BSR L09760
BSR L09692
L095B0 BSR.S L0960C
BEQ.S L095DC
L095B4 MOVEA.L BV_RTP(A6),A5 ;return table running ptr
MOVE.L BV_NTP(A6),-$10(A6,A5.L) ;name table
;running pointer
MOVE.L BV_NTBAS(A6),D1 ;name table
SUB.L D1,-$18(A6,A5.L)
SUB.L D1,-$14(A6,A5.L)
SUB.L D1,-$10(A6,A5.L)
TST.L D0
BNE.S L095DA
ADDQ.W #4,A7
JMP L0A8C0(PC) ;*/undomodify BRA L0A8C0
MOVEQ #0,D0
L095DA RTS
L095DC ADDQ.W #2,A4
BSR.S L0965C
CMPI.B #$88,D0
BNE.S L095FE
BSR.S L09660
BSR.S L0965C
CMPI.W #$8405,D1
BNE.S L095FE
ADDQ.B #1,0(A6,A2.L)
SUBQ.W #4,A4
JSR L098E8(PC) ;*/undomodify BSR L098E8
BNE.S L095B4
BSR.S L0965C
L095FE CMPI.W #$8404,D1
BEQ.S L095DC
BSR.S L0959E
BEQ.S L095B0
MOVEQ #-21,D0 ;Bad line error
BRA.S L095B4
L0960C JSR L0A60E(PC) ;*/undomodify BSR L0A60E
BNE.S L09628
BSR.S L0965C
MOVEQ #0,D0
CMPI.W #$811E,D1
BEQ.S L0960C
CMPI.W #$8118,D1
BEQ.S L0960C
CMPI.W #$811A,D1
RTS
L09628 MOVEQ #-10,D0 ;End of file error
RTS
; <---------- ??????????
L0962C MOVEQ #0,D0
MOVE.W 2(A6,A4.L),D0
LSL.L #3,D0
MOVEA.L BV_NTBAS(A6),A2 ;name table
ADDA.L D0,A2
MOVE.W 0(A6,A2.L),D0
MOVE.W 0(A6,A3.L),0(A6,A2.L)
MOVE.W D0,0(A6,A3.L)
MOVE.L 4(A6,A2.L),D0
MOVE.L 4(A6,A3.L),4(A6,A2.L)
MOVE.L D0,4(A6,A3.L)
ADDQ.W #8,A3
ADDQ.W #4,A4
RTS
L0965C JMP L0A56C(PC) ;*/undomodify BRA L0A56C
L09660 MOVEA.L BV_NTP(A6),A3 ;name table running ptr
MOVE.B #$02,0(A6,A3.L)
MOVE.W #$FFFF,$02(A6,A3.L)
MOVE.L #$FFFFFFFF,$04(A6,A3.L)
BSR.S L0962C
MOVE.B -$07(A6,A3.L),$01(A6,A2.L)
MOVE.L A3,BV_NTP(A6) ;name table running pointer
RTS
L09686 CMPI.W #$840A,D1
BEQ.S L09690
CMPI.W #$8402,D1
L09690 RTS
L09692 BSR.S L0965C
ADDQ.W #2,A4
BSR.S L0965C
ADDQ.W #2,A4
BSR.S L0965C
TST.W D3
BLT.S L096A6
CMP.W $02(A6,A4.L),D3
BNE.S L096B4
L096A6 ADDQ.W #4,A4
BSR.S L0965C
CMPI.W #$8405,D1
BEQ.S L096C0
BSR.S L09686
BEQ.S L096BA
L096B4 ADDQ.W #4,A7
L096B6 MOVEQ #-7,D0 ;Not found error
RTS
L096BA MOVEA.L -$14(A6,A5.L),A3
RTS
L096C0 ADDQ.W #2,A4
L096C2 BSR.S L0965C
CMPI.B #$88,D0
BNE.S L096DE
CMPA.L -$14(A6,A5.L),A3
BLT.S L096D8
BSR.S L09660
MOVE.L A3,-$14(A6,A5.L)
BRA.S L096C2
L096D8 BSR L0962C
BRA.S L096C2
L096DE CMPI.W #$8406,D1
BNE.S L096C0
L096E4 RTS
DO_RETURn ; execute RETURN
MOVEA.L BV_RTP(A6),A5 ;return table running ptr
CMPA.L BV_RTBAS(A6),A5 ;return table
BLE.S L096B6
MOVE.B -$08(A6,A5.L),D5
BEQ.S L09718
MOVE.B D5,D0
SUBQ.B #2,D0
BLT.S L09714
MOVE.B -$0A(A6,A5.L),D0
MOVEA.L A4,A0
JSR L05A84(PC) ;*/undomodify BSR L05A84
MOVEA.L A0,A4
BLT.S L096E4
BEQ.S L09710
MOVEQ #-$11,D0
RTS
L09710 MOVEA.L BV_RTP(A6),A5 ;return table running ptr
L09714 BSR.S L09768
BNE.S L096E4
L09718 MOVE.L -$04(A6,A5.L),BV_INLIN(A6) ;Processing inline clause
MOVE.W -$06(A6,A5.L),D4
BSR.S L09760
MOVE.L -$04(A6,A5.L),BV_INLIN(A6) ;Processing inline clause
MOVE.B -$07(A6,A5.L),D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
SUBQ.W #8,A5
TST.B D5
BEQ.S L0973C
SUBA.W #$0010,A5
L0973C SF $0090(A6) ;Need to unravel
;($ff) or not (0)
MOVE.L A5,BV_RTP(A6) ;return table running ptr
MOVEQ #0,D0
SUBQ.B #2,D5
BLT.S L0975C
MOVEA.L BV_NTP(A6),A5 ;name table running pointer
MOVE.B #$01,-$08(A6,A5.L)
ADDQ.W #8,A7
MOVEA.L (A7)+,A0
ADDA.L BV_TKBAS(A6),A0 ;token list
L0975C TST.L D0
RTS
L09760 JSR L09FA2(PC) ;*/undomodify BSR L09FA2
JMP L0A966(PC) ;*/undomodify BRA L0A966
L09768 MOVE.L BV_NTBAS(A6),D0 ;name table
ADD.L D0,-$18(A6,A5.L)
ADD.L D0,-$14(A6,A5.L)
ADD.L D0,-$10(A6,A5.L)
CMPA.L BV_PFBAS(A6),A4 ;program file
BLE.S L09784
CMPA.L BV_PFP(A6),A4 ;program running pointer
BLT.S L09788
L09784 BSR L0958E
L09788 TST.B -9(A6,A5.L)
BEQ.S L097C8
MOVE.W -$0C(A6,A5.L),D4
MOVEA.L -$14(A6,A5.L),A3
BSR.S L09760
L09798 BSR L0960C
BNE.S L097B0
L0979E MOVE.W #$8800,D4
JSR L0A5E0(PC) ;*/undomodify BSR L0A5E0
BNE.S L09798
BSR L0962C
SUBQ.W #4,A4
BRA.S L0979E
L097B0 MOVE.W -$0C(A6,A5.L),D4
MOVEA.L -$18(A6,A5.L),A3
TST.B D0
BEQ.S L097C0
BSR L0958E
L097C0 BSR.S L09760
MOVEQ #-$01,D3
BSR L09692
L097C8 MOVEA.L -$18(A6,A5.L),A3
MOVEA.L -$10(A6,A5.L),A5
JSR STO_VARValue(PC) ;*/undomodify BSR STO_VARValue
BNE.S L0975C
MOVEA.L BV_RTP(A6),A5 ;return table running ptr
RTS
L097DC BSR.S L097E0
RTS
L097E0 MOVEA.L BV_CHBAS(A6),A0 ;channel name
MOVEA.L 0(A6,A0.L),A0
MOVE.L D0,-(A7)
MOVEQ #-$1B,D0
JSR UT_ERR(PC) ;*/undomodify BSR UT_ERR
MOVE.L (A7)+,D0
L097F2 MOVEA.L BV_RTP(A6),A5 ;return table running ptr
CMPA.L BV_RTBAS(A6),A5 ;return table
BLE.S L09828
MOVE.B -$08(A6,A5.L),D5
BEQ.S L0980A
BSR L09768
SUBA.W #$0010,A5
L0980A SUBQ.W #8,A5
MOVE.L A5,BV_RTP(A6) ;return table running ptr
SUBQ.B #2,D5
BLT.S L097F2
MOVEA.L BV_NTP(A6),A5 ;name table running pointer
SUBQ.W #8,A5
L0981A MOVEQ #0,D2
JSR L05CBC(PC) ;*/undomodify BSR L05CBC
BNE.S L0981A
MOVE.L A5,BV_NTP(A6) ;name table running pointer
BRA.S L097F2
L09828 SF BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
MOVEA.L (A7)+,A3
MOVEA.L (A7)+,A5
TRAP #0
MOVEA.L BV_SSBAS(A6),A1 ;system stack running ptr
ADDA.L A6,A1
SUBQ.W #4,A1
MOVE.L A1,USP
MOVE.W #0,SR
MOVE.L A5,-(A7)
MOVE.L A3,-(A7)
ST BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
TST.B $00B8(A6) ;
BNE L0A6EE
RTS
L09852 MOVE.L A4,-(A7)
JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L09872
L0985A ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
MOVE.L A4,-(A7)
JSR L09B32(PC) ;*/undomodify BSR L09B32
CMPA.L (A7)+,A4
BNE.S L09870
TST.B D0
BGE.S L0985A
BRA.S L09872
L09870 MOVEQ #0,D0
L09872 MOVEA.L (A7)+,A4
RTS
L09876 MOVEQ #0,D6
MOVE.L A4,D3
L0987A MOVE.W 0(A6,A4.L),D1
CMPI.W #$810A,D1
BEQ.S L098A0
JSR L09686(PC) ;*/undomodify BSR L09686
BEQ.S L098A2
CMPI.W #$8401,D1
BNE.S L0989A
TST.B D6
BNE.S L0989A
ADDQ.W #2,A4
MOVE.L A4,D3
MOVEQ #$01,D6
L0989A JSR L09072(PC) ;*/undomodify BSR L09072
BRA.S L0987A
L098A0 MOVEQ #-1,D0
L098A2 MOVEA.L D3,A4
RTS
L098A6 ;execute DEFine
MOVEQ #7,D2
L098A8 JSR L0A60E(PC) ;*/undomodify BSR L0A60E
BNE.S L098C2
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8101,D1
BNE.S L098A8
ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMP.B D2,D1
BNE.S L098A8
L098C2 MOVEQ #0,D0
RTS
L098C6 ;execute DIM
MOVEM.L D4-D6/A5,-(A7)
SUBQ.W #2,A4
L098CC ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
BSR.S L098E8
BNE.S L098E2
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8404,D1
BEQ.S L098CC
MOVEQ #0,D0
L098E2 MOVEM.L (A7)+,D4-D6/A5
RTS
L098E8 MOVEQ #0,D4
MOVE.W $02(A6,A4.L),D4
ADDQ.W #4,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
ADDQ.W #2,A4
MOVEQ #0,D5
MOVEA.L (A6),A5
MOVEA.L A4,A0
L098FC MOVE.L A5,-(A7)
JSR L05A82(PC) ;*/undomodify BSR L05A82
MOVEA.L (A7)+,A5
MOVEA.L A0,A4
BNE.S L09980
ADDQ.L #1,D5
MOVE.W 0(A6,A1.L),0(A6,A5.L)
BLT.S L0997A
ADDQ.W #4,A5
ADDQ.L #2,BV_RIP(A6) ;arith stack
ADDQ.W #2,A0
CMPI.W #$8404,-$02(A6,A0.L)
BEQ.S L098FC
CMPI.W #$8406,-$02(A6,A0.L)
BNE.S L0997E
LSL.L #3,D4
MOVEA.L BV_NTBAS(A6),A3 ;name table
ADDA.L D4,A3
CMPI.B #3,0(A6,A3.L) ;array ?
BNE.S L09982
MOVE.B 1(A6,A3.L),D6 ;get variablle type
CMPI.B #1,D6 ;string ?
BNE.S L09958
MOVE.W -4(A6,A5.L),D1
ADDQ.W #1,D1
BCLR #0,D1
MOVE.W D1,-4(A6,A5.L)
BLE.S L0997A
MOVEQ #2,D1
BRA.S L0995A
L09958 MOVEQ #1,D1
L0995A MOVE.L D5,D0
MOVEQ #1,D2
L0995E SUBQ.W #4,A5
MOVE.W D2,2(A6,A5.L)
SUBQ.L #1,D0
BEQ.S L09986
MOVE.L D1,D3
MOVEQ #1,D1
ADD.W 0(A6,A5.L),D3
MULU D3,D2
MOVE.L D2,D3
SWAP D3
TST.W D3
BEQ.S L0995E
L0997A MOVEQ #-4,D0 ;out of range
RTS
L0997E MOVEQ #-17,D0 ;error in expression
L09980 RTS
L09982 MOVEQ #-12,D0 ;Bad name
RTS
L09986 MOVEA.L A0,A4
MOVE.L 4(A6,A3.L),D4
BLT.S L09990
BSR.S L099FE
L09990 MOVE.L D5,D1
LSL.L #2,D1
ADDQ.L #6,D1
MOVE.L A3,-(A7)
JSR L04DF6(PC) ;*/undomodify BSR L04DF6
MOVEA.L (A7)+,A3
MOVE.L A0,D1
SUB.L BV_VVBAS(A6),D1 ;variable values
MOVE.L D1,$04(A6,A3.L)
MOVE.L A0,-(A7)
MOVE.W D5,$04(A6,A0.L)
ADDQ.W #6,A0
L099B0 MOVE.L 0(A6,A5.L),0(A6,A0.L)
ADDQ.W #4,A5
ADDQ.W #4,A0
SUBQ.L #1,D5
BGT.S L099B0
MOVEA.L (A6),A5
MOVEQ #$01,D1
ADD.W 0(A6,A5.L),D1
MULU $02(A6,A5.L),D1
SUBQ.B #2,D6
BLT.S L099DC
BEQ.S L099D4
ADD.L D1,D1
BRA.S L099DC
L099D4 ADD.L D1,D1
MOVE.L D1,D0
ADD.L D1,D1
ADD.L D0,D1
L099DC MOVE.L A3,-(A7)
JSR L04DF6(PC) ;*/undomodify BSR L04DF6
MOVEA.L (A7)+,A3
MOVE.L A0,D2
SUB.L BV_VVBAS(A6),D2 ;variable values
MOVEA.L (A7)+,A2
MOVE.L D2,0(A6,A2.L)
L099F0 CLR.W 0(A6,A0.L)
ADDQ.W #2,A0
SUBQ.L #2,D1
BGT.S L099F0
MOVEQ #0,D0
RTS
L099FE MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L D4,A2
MOVEQ #$01,D2
ADD.W $06(A6,A2.L),D2
MULU $08(A6,A2.L),D2
MOVE.B D6,D1
SUBQ.B #2,D1
BLT.S L09A22
BEQ.S L09A1A
ADD.L D2,D2
BRA.S L09A22
L09A1A ADD.L D2,D2
MOVE.L D2,D1
ADD.L D2,D2
ADD.L D1,D2
L09A22 MOVE.L D2,D1
MOVEA.L BV_VVBAS(A6),A0 ;variable values
ADDA.L 0(A6,A2.L),A0
MOVE.L A3,-(A7)
MOVE.L A2,-(A7)
JSR L04FE8(PC) ;*/undomodify BSR L04FE8
MOVEA.L (A7)+,A2
BSR.S L09A3C
MOVEA.L (A7)+,A3
RTS
L09A3C MOVEQ #0,D1
MOVE.W $04(A6,A2.L),D1
LSL.L #2,D1
ADDQ.L #6,D1
MOVEA.L A2,A0
JMP L04FE8(PC) ;*/undomodify BRA L04FE8
L09A4C ; execute ELSE
MOVEQ #0,D4
L09A4E JSR L09B32(PC) ;*/undomodify BSR L09B32
BGE.S L09A5A
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L09AA4
L09A5A JSR L0A60E(PC) ;*/undomodify BSR L0A60E
BNE.S L09AA4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$81,D0
BNE.S L09A4E
ADDQ.W #2,A4
CMPI.B #$03,D1
BNE.S L09A8C
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L09A88
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L09A88
L09A7E JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L09A5A
ADDQ.W #2,A4
BRA.S L09A7E
L09A88 ADDQ.W #1,D4
BRA.S L09A4E
L09A8C CMPI.B #$01,D1
BNE.S L09A4E
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8103,D1
BNE.S L09A4E
TST.B D4
BEQ.S L09AA4
SUBQ.W #1,D4
BRA.S L09A4E
L09AA4 MOVEQ #0,D0
RTS
L09AA8 ; execute END
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8107,D1
BEQ DO_RETURn
CMPI.W #$8106,D1
BEQ.S L09AE6
MOVEQ #6,D5
CMPI.W #$8104,D1
BEQ.S L09ACA
MOVEQ #7,D5
CMPI.W #$8102,D1
BNE.S L09B28
L09ACA ADDQ.W #2,A4
JSR L0A09E(PC) ;*/undomodify BSR L0A09E
BNE.S L09B2A
CMP.B D5,D1
BNE.S L09B2E
MOVE.W BV_LINUM(A6),$08(A6,A2.L) ;current line #
MOVE.B BV_STMNT(A6),$0B(A6,A2.L) ;current stmnt on line
JMP L0A37A(PC) ;*/undomodify BRA L0A37A
L09AE6 TST.B $00C0(A6) ;
BNE BAS_CONTinue
L09AEE MOVE.W BV_LINUM(A6),D4 ;current line #
MOVEQ #-1,D3
JSR L0ACC2(PC) ;*/undomodify BSR L0ACC2
BNE.S L09B28
L09AFA MOVE.W $08(A6,A2.L),D4
SEQ BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
MOVE.B $0A(A6,A2.L),-(A7)
MOVE.B $0B(A6,A2.L),BV_INLIN(A6) ;Processing inline clause
MOVE.W $0C(A6,A2.L),BV_INDEX(A6) ;Name tab row of last lp
ST $08(A6,A2.L)
JSR L09FA2(PC) ;*/undomodify BSR L09FA2
BNE.S L09B2C
JSR L0A96A(PC) ;*/undomodify BSR L0A96A
BNE.S L09B2C
MOVE.B (A7)+,D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
L09B28 MOVEQ #0,D0
L09B2A RTS
L09B2C ADDQ.W #2,A7
L09B2E MOVEQ #-$07,D0
RTS
L09B32 MOVEQ #0,D0
MOVE.W 0(A6,A4.L),D1
CMPI.W #$8402,D1
BEQ.S L09B5C
CMPI.W #$840A,D1
BEQ.S L09B5A
MOVEQ #$01,D0
CMPI.W #$811C,D1
BEQ.S L09B5C
MOVEQ #$02,D0
CMPI.W #$8114,D1
BEQ.S L09B5C
JSR L09072(PC) ;*/undomodify BSR L09072
BRA.S L09B32
L09B5A MOVEQ #-$01,D0
L09B5C RTS
L09B5E MOVE.W BV_LINUM(A6),BV_CNLNO(A6) ;current line #
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L09B70
MOVE.W #$FFFF,BV_CNLNO(A6) ;Line to CONTINUE from
L09B70 MOVE.B BV_STMNT(A6),BV_CNSTM(A6) ;current stmnt on line
MOVE.B BV_INLIN(A6),BV_CNINL(A6) ;Processing inline clause
MOVE.W BV_INDEX(A6),BV_CNIND(A6) ;Name tab row of last lp
MOVE.L BV_RTP(A6),D1 ;return table running ptr
SUB.L BV_RTBAS(A6),D1 ;return table
SNE $0090(A6) ;Need to unravel
;($ff) or not (0)
RTS
L09B90 MOVEQ #-$01,D0
L09B92 TST.B $00C0(A6)
BNE.S L09BB6
BSR.S L09B5E
BRA.S L09BD4
L09B9C ; error handling
ST BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
CMPI.L #-21,D0 ;bad line
BEQ.S L09B92
L09BA8 CMPI.L #-1,D0 ;not complete
BEQ.S L09B92
TST.B $C0(A6)
BEQ.S L09BC0
L09BB6 BSR.S L09BD4
MOVEQ #-26,D0
JSR UT_ERR(PC) ;*/undomodify BSR UT_ERR
BRA.S L09C18
L09BC0 BSR.S L09B5E
MOVE.W BV_LINUM(A6),$00C6(A6) ;current line #
MOVE.L D0,$00C2(A6) ;
BGE.S L09C18
MOVE.W $00BC(A6),D4 ;
BNE.S L09C1C
L09BD4 MOVEA.L BV_CHBAS(A6),A0 ;channel name
MOVEA.L 0(A6,A0.L),A0
L09BDC MOVE.W #$FFFF,BV_NXLIN(A6) ;line # to start after
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L09C14
MOVE.L D0,-(A7)
MOVEQ #-$16,D0
JSR UT_ERR(PC) ;*/undomodify BSR UT_ERR
MOVEA.L A0,A5
MOVEA.W #$0068,A1
MOVEA.L (A6),A0
JSR CN_ITOD(PC) ;*/undomodify BSR CN_ITOD
MOVE.B #$20,0(A6,A0.L)
ADDQ.W #1,D1
MOVEA.L (A6),A1 ;string to be send
MOVE.W D1,D2 ;number of bytes to be send
MOVEA.L A5,A0 ;channel ID
MOVEQ #7,D0 ;IO.SSTRG send a string of
;bytes
MOVEQ #-1,D3
TRAP #4
TRAP #3
MOVE.L (A7)+,D0
L09C14 JSR UT_ERR(PC) ;*/undomodify BSR UT_ERR
L09C18 MOVEQ #-1,D0 ;not complete
RTS
L09C1C ST $C0(A6) ;not defined in advanced
;user guide !!!!!
MOVE.L D0,-(A7)
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L09C2E
JSR L0958E(PC) ;*/undomodify BSR L0958E
BNE.S L09C56
L09C2E JSR L09FA2(PC) ;*/undomodify BSR L09FA2
JSR L0A966(PC) ;*/undomodify BSR L0A966
BNE.S L09C56
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8106,D1
BNE.S L09C56
ADDQ.W #4,A7
MOVE.B $00BF(A6),BV_INLIN(A6)
MOVE.B $00BE(A6),D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
JMP L0A90C(PC) ;*/undomodify BRA L0A90C
L09C56 CLR.W $BC(A6)
SF $C0(A6)
MOVE.L (A7)+,D0
BRA L09BD4
L09C64 ; execute EXIT
JSR L0A09E(PC) ;*/undomodify BSR L0A09E
BNE L09CFC
MOVE.W 8(A6,A2.L),D4
BEQ.S L09C88
JSR L09FA2(PC) ;*/undomodify BSR L09FA2
BNE.S L09C86
JSR L0A966(PC) ;*/undomodify BSR L0A966
BNE.S L09C86
MOVE.B $0B(A6,A2.L),D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
L09C86 BRA.S L09CFA
L09C88 MOVE.W -$02(A6,A4.L),D4
MOVEQ #$07,D5
SUB.B D1,D5
L09C90 JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L09C9E
ADDQ.W #2,A4
ADDQ.B #1,BV_STMNT(A6) ;current stmnt on line
BRA.S L09CC0
L09C9E TST.B BV_INLIN(A6) ;Processing inline clause?
BEQ.S L09CB2
SF BV_INLIN(A6) ;Processing inline clause
MOVE.W BV_LINUM(A6),D0 ;current line #
CMP.W $06(A6,A2.L),D0
BEQ.S L09CFA
L09CB2 TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L09CFA
ADDQ.W #2,A4
JSR L0A966(PC) ;*/undomodify BSR L0A966
BNE.S L09CFA
L09CC0 JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8101,D1
BNE.S L09C90
ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
TST.B D5
BEQ.S L09CDC
CMPI.W #$8104,D1
BNE.S L09C90
BRA.S L09CE2
L09CDC CMPI.W #$8102,D1
BNE.S L09C90
L09CE2 ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMP.W $02(A6,A4.L),D4
BNE.S L09C90
MOVE.W BV_LINUM(A6),$08(A6,A2.L) ;current line #
MOVE.B BV_STMNT(A6),$0B(A6,A2.L) ;current stmnt on line
L09CFA MOVEQ #0,D0
L09CFC RTS
L09CFE MOVEQ #0,D5
L09D00 BSR.S L09D46
BNE.S L09D56
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$81,D0
BNE.S L09D00
ADDQ.W #2,A4
CMPI.B #$01,D1
BNE.S L09D26
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8105,D1
BNE.S L09D00
SUBQ.W #1,D5
BLT.S L09D56
BRA.S L09D00
L09D26 CMPI.B #$05,D1
BNE.S L09D00
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L09D38
TST.B BV_INLIN(A6) ;Processing inline clause?
BEQ.S L09D3C
L09D38 ADDQ.W #1,D5
BRA.S L09D00
L09D3C JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L09D00
ADDQ.W #2,A4
BRA.S L09D3C
L09D46 JSR L0A60E(PC) ;*/undomodify BSR L0A60E
BNE.S L09D64
TST.B D0
BEQ.S L09D56
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L09D5A
L09D56 MOVEQ #0,D0
RTS
L09D5A SUBQ.W #8,A4
MOVE.W $02(A6,A4.L),D0
SUB.W D0,BV_LENGTH(A6) ;current length
L09D64 TST.B BV_INLIN(A6) ;Processing inline clause?
BGT.S L09D6E
SF BV_INLIN(A6) ;Processing inline clause
L09D6E MOVEQ #$01,D0
RTS
L09D72 MOVEQ #0,D5
L09D74:
JSR L09D46(PC) ;*/undomodify BSR.S L09D46
;*/undomodify nop
BNE.S L09DEC
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8401,D1
BNE.S L09D8C
ADDQ.W #2,A4
TST.B D5
BEQ.S L09DEE
BRA.S L09D74
L09D8C:
CMPI.B #$81,D0
BNE.S L09D74
CMPI.B #$15,D1
BNE.S L09DB6
TST.B D5
BNE.S L09D74
JSR L09876(PC) ;*/undomodify BSR L09876
BLT.S L09D74
MOVEA.L A4,A3
L09DA4 SUBQ.W #2,A3
CMPI.W #$8800,0(A6,A3.L)
BNE.S L09DA4
CMP.W $02(A6,A3.L),D4
BNE.S L09D74
BRA.S L09DEE
L09DB6 CMPI.B #$05,D1
BNE.S L09DD6
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L09DC8
TST.B BV_INLIN(A6) ;Processing inline clause?
BEQ.S L09DCC
L09DC8 ADDQ.W #1,D5
BRA.S L09D74
L09DCC JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L09D74
ADDQ.W #2,A4
BRA.S L09DCC
L09DD6 CMPI.B #$01,D1
BNE.S L09D74
ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8105,D1
BNE.S L09D74
SUBQ.W #1,D5
BGE.S L09D74
L09DEC RTS
L09DEE MOVEQ #0,D0
RTS
L09DF2 ; execute FOR
MOVEA.L A4,A5
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
MOVEQ #0,D4
MOVE.W 2(A6,A4.L),D4
ADDQ.W #4,A4
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L09E10
MOVE.B #1,BV_INLIN(A6) ;Processing inline clause
MOVE.W D4,BV_INDEX(A6) ;Name tab row of last lp
L09E10 JSR L09F96(PC) ;*/undomodify BSR L09F96
MOVE.B 1(A6,A2.L),D2
SUBQ.B #2,D2
BNE.S L09E30 ;bad name
MOVE.B 0(A6,A2.L),D2
MOVEQ #6,D1
SUBQ.B #2,D2
BEQ.S L09E34
MOVEQ #$0C,D1
SUBQ.B #4,D2
BEQ.S L09E34
SUBQ.B #1,D2
BEQ.S L09E5C
L09E30 MOVEQ #-12,D0 ;Bad name error
RTS
L09E34 MOVE.L A2,-(A7)
MOVE.L 4(A6,A2.L),D2
BLT.S L09E46
MOVEA.L BV_VVBAS(A6),A0 ;variable values
ADDA.L D2,A0
JSR L04FE8(PC) ;*/undomodify BSR L04FE8
L09E46 MOVEQ #$1A,D1
JSR L04DF6(PC) ;*/undomodify BSR L04DF6
SUBA.L BV_VVBAS(A6),A0 ;variable values
MOVEA.L (A7)+,A2
MOVE.B #$07,0(A6,A2.L) ;set FOR LOOP index Flag
MOVE.L A0,4(A6,A2.L)
L09E5C:
JSR L0A2FE(PC) ;*/undomodify BSR L0A2FE
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
MOVE.L A4,D0
SUB.L A5,D0
MOVE.L D7,$0C(A6,A2.L)
MOVE.L D7,$10(A6,A2.L)
MOVE.L D7,$14(A6,A2.L)
MOVE.W D0,$18(A6,A2.L)
JSR L09E88(PC) ;*/undomodify BSR.S L09E88
;*/undomodify nop
BGT.S L09E80
RTS
L09E80:
MOVEQ #0,D5
JMP L09C90(PC) ;*/undomodify BRA L09C90
L09E86 DC.B $01
L09E87 DC.B $40
L09E88 MOVE.L A4,-(A7)
MOVE.W 0(A6,A4.L),D1
JSR L09686(PC) ;*/undomodify BSR L09686
BNE.S L09E98
MOVEQ #$01,D0
BRA.S L09EA6
L09E98 CMPI.W #$8401,D1
BEQ.S L09EAA
CMPI.W #$8404,D1
BEQ.S L09EAA
MOVEQ #-4,D0 ;out of ange error
L09EA6 ADDQ.W #4,A7
RTS
L09EAA ADDQ.W #2,A4
MOVEA.L A4,A0
MOVE.L D4,D6
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L A0,A4
BNE.S L09EA6
BSR L09F7E
MOVE.W 0(A6,A1.L),0(A6,A2.L)
MOVE.L 2(A6,A1.L),2(A6,A2.L)
ADDQ.L #6,BV_RIP(A6) ;arith stack
CMPI.W #$810B,0(A6,A4.L)
BEQ.S L09EF4
MOVE.W 0(A6,A2.L),$0C(A6,A2.L)
MOVE.L 2(A6,A2.L),$0E(A6,A2.L)
MOVE.W D7,$12(A6,A2.L)
MOVE.L D7,$14(A6,A2.L)
MOVE.L A4,D0
SUB.L (A7)+,D0
ADD.W D0,$18(A6,A2.L)
BRA L09F76
L09EF4 ADDQ.W #2,A4
MOVEA.L A4,A0
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L A0,A4
L09EFE BNE.S L09EA6
bsr.s L09F7E
MOVE.W 0(A6,A1.L),$0C(A6,A2.L)
MOVE.L $02(A6,A1.L),$0E(A6,A2.L)
ADDQ.L #6,BV_RIP(A6) ;arith stack
CMPI.W #$811D,0(A6,A4.L)
BEQ.S L09F32
MOVE.B #8,$12(A6,A2.L)
MOVE.B L09E86(PC),$13(A6,A2.L) ;must have to do with
;STEP
MOVE.L D7,$14(A6,A2.L)
MOVE.B L09E87(PC),$14(A6,A2.L) ;must have to do with
;step
BRA.S L09F50
L09F32 ADDQ.W #2,A4
MOVEA.L A4,A0
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L A0,A4
BNE.S L09EFE
BSR.S L09F7E
MOVE.W 0(A6,A1.L),$12(A6,A2.L)
MOVE.L $02(A6,A1.L),$14(A6,A2.L)
ADDQ.L #6,BV_RIP(A6) ;arith stack
L09F50 MOVE.L A4,D0
SUB.L (A7)+,D0
ADD.W D0,$18(A6,A2.L)
JSR L04E4C(PC) ;*/undomodify BSR L04E4C
MOVEA.L $0058(A6),A1 ;arith stack
SUBQ.W #6,A1
MOVE.L $02(A6,A2.L),$02(A6,A1.L)
MOVE.W 0(A6,A2.L),0(A6,A1.L)
JSR L0A404(PC) ;*/undomodify BSR L0A404
BRA.S L09F78
BRA.S L09F7A
L09F76 MOVEQ #0,D0
L09F78 RTS
L09F7A BRA L09E88
L09F7E MOVE.L D6,D4
L09F80 BSR.S L09F96
MOVE.B 0(A6,A2.L),D1
MOVE.B 1(A6,A2.L),D2
MOVE.L 4(A6,A2.L),D0
MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L D0,A2
RTS
L09F96 MOVE.L D4,D0
MOVEA.L BV_NTBAS(A6),A2 ;name table
LSL.L #3,D0
ADDA.W D0,A2
RTS
L09FA2 TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L09FAE
MOVEA.L BV_TKBAS(A6),A4 ;token list
BRA.S L0A006
L09FAE CMPI.W #$840A,0(A6,A4.L)
BEQ.S L09FBC
JSR L09072(PC) ;*/undomodify BSR L09072
BRA.S L09FAE
L09FBC ADDQ.W #2,A4
L09FBE MOVEQ #0,D1
MOVEQ #0,D2
CMP.W BV_LINUM(A6),D4 ;current line #
BLE.S L09FEC
L09FC8 CMPA.L BV_PFP(A6),A4 ;program running pointer
BLT.S L09FD2
JMP L0A994(PC) ;*/undomodify BRA L0A994
L09FD2 CMP.W 4(A6,A4.L),D4
BLE.S L0A006
L09FD8 MOVE.W 4(A6,A4.L),D2
MOVE.W 0(A6,A4.L),D1
ADDQ.W #2,A4
ADD.W D1,BV_LENGTH(A6) ;current length
ADDA.W BV_LENGTH(A6),A4 ;current length
BRA.S L09FC8
L09FEC SUBA.W BV_LENGTH(A6),A4 ;current length
SUBQ.W #2,A4
MOVE.W 0(A6,A4.L),D1
SUB.W D1,BV_LENGTH(A6) ;current length
CMP.W $04(A6,A4.L),D4
BGT.S L09FD8
CMPA.L BV_PFBAS(A6),A4 ;program file
BGT.S L09FEC
L0A006 MOVEQ #0,D0
RTS
L0A00A CMP.B BV_STMNT(A6),D4 ;current stmnt on line
BLE.S L0A01E
JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L0A01E
ADDQ.W #2,A4
ADDQ.B #1,BV_STMNT(A6) ;current stmnt on line
BRA.S L0A00A
L0A01E MOVEQ #0,D0
RTS
L0A022 ; execute GO
MOVEQ #$01,D4
BRA.S L0A038
L0A026 ; execute ON ...
JSR L09876(PC) ;*/undomodify BSR L09876
BGE L09CFE
BSR.S L0A086
MOVE.W 0(A6,A1.L),D4
BLE.S L0A082
ADDQ.W #2,A4
L0A038 JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$0B,D1
SEQ D5
L0A042 MOVE.W 0(A6,A4.L),D1
JSR L09686(PC) ;*/undomodify BSR L09686
BEQ.S L0A082
ADDQ.W #2,A4
BSR.S L0A086
BGT.S L0A042
SUBQ.W #1,D4
BNE.S L0A042
MOVE.W 0(A6,A1.L),D4
TST.B D5
BEQ L094CA
SF BV_INLIN(A6) ;Processing inline clause
TST.B BV_SING(A6) ;Single line exection
;ON ($FF) or OFF (0)
BEQ.S L0A078
SF BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
MOVEA.L BV_PFBAS(A6),A4 ;program file
JSR L0A966(PC) ;*/undomodify BSR L0A966
BNE.S L0A07E
L0A078 JSR L09FA2(PC) ;*/undomodify BSR L09FA2
SUBQ.W #2,A4
L0A07E MOVEQ #0,D0
RTS
L0A082 MOVEQ #-$04,D0
RTS
L0A086 MOVEA.L A4,A0
JSR L05A82(PC) ;*/undomodify BSR L05A82
MOVEA.L A0,A4
BLT.S L0A09A
BGT.S L0A098
ADDQ.L #2,BV_RIP(A6) ;arith stack
MOVEQ #0,D0
L0A098 RTS
L0A09A ADDQ.W #4,A7
RTS
L0A09E JSR L0A56C(PC) ;*/undomodify BSR L0A56C
MOVEQ #0,D4
MOVE.W $02(A6,A4.L),D4
ADDQ.W #4,A4
L0A0AA JSR L09F80(PC) ;*/undomodify BSR L09F80
MOVEQ #0,D0
MOVE.B D1,D0
SUBQ.B #6,D0
BEQ.S L0A0BC
SUBQ.B #1,D0
BEQ.S L0A0BC
MOVEQ #-$07,D0
L0A0BC RTS
L0A0BE ; execute IF
MOVEA.L A4,A0
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L A0,A4
BNE L0A150
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L0A0DA
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L0A0DA
ST BV_INLIN(A6) ;Processing inline clause
L0A0DA ADDQ.L #6,BV_RIP(A6) ;arith stack
TST.W 0(A6,A1.L)
BNE.S L0A14E
MOVEQ #0,D4
L0A0E6 JSR L09B32(PC) ;*/undomodify BSR L09B32
BGE.S L0A0F2
TST.B BV_INLIN(A6) ;Processing inline clause
BNE.S L0A14E
L0A0F2 JSR L0A60E(PC) ;*/undomodify BSR L0A60E
BNE.S L0A14E
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$81,D0
BNE.S L0A0E6
ADDQ.W #2,A4
CMPI.B #$03,D1
BNE.S L0A124
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L0A120
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L0A120
L0A116 JSR L09B32(PC) ;*/undomodify BSR L09B32
BLT.S L0A0F2
ADDQ.W #2,A4
BRA.S L0A116
L0A120 ADDQ.W #1,D4
BRA.S L0A0E6
L0A124 CMPI.B #$01,D1
BNE.S L0A13C
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8103,D1
BNE.S L0A0E6
TST.B D4
BEQ.S L0A14E
SUBQ.W #1,D4
BRA.S L0A0E6
L0A13C CMPI.B #$14,D1
BNE.S L0A0E6
TST.B D4
BEQ.S L0A14C
ADDQ.B #1,BV_STMNT(A6) ;current stmnt on line
BRA.S L0A0E6
L0A14C SUBQ.W #2,A4
L0A14E MOVEQ #0,D0
L0A150 RTS
L0A152 ; used to execute depending instructions
DC.W L09AA8-L0A190 ;END
DC.W L09DF2-L0A190 ;FOR
DC.W L0A0BE-L0A190 ;IF
DC.W L0A7B6-L0A190 ;REPEAT
DC.W L0A84A-L0A190 ;SELECT
DC.W L0AC00-L0A190 ;WHEN
DC.W L098A6-L0A190 ;DEFINE
DC.W $0 ;PROCEDURE:USELESS IF ALONE
DC.W $0 ;FUNCTION: USELESS IF ALONE
DC.W L0A022-L0A190 ;GO
DC.W $0 ;TO:USELESS IF ALONE
DC.W $0 ;SUB: USELESS F ALONE
DC.W $0 ;WHEN: USELESS IF ALONE
DC.W $0 ;ERROR: USELESS IF ALONE
DC.W $0 ;EOF
DC.W $0 ;INPUT
DC.W L0A820-L0A190 ;RESTORE
DC.W L0A372-L0A190 ;NEXT
DC.W L09C64-L0A190 ;EXIT
DC.W L09A4C-L0A190 ;ELSE
DC.W L0A026-L0A190 ;ON
DC.W DO_RETURn-L0A190 ;RETURN
DC.W $0 ;REMAINDER
DC.W L0A7B2-L0A190 ;DATA
DC.W L098C6-L0A190 ;DIM
DC.W L0A2FA-L0A190 ;LOCAL
DC.W L0A332-L0A190 ;LET
DC.W $0 ;THEN
DC.W $0 ;STEP
DC.W L0A7B2-L0A190 ;REMARK
DC.W L0A2FA-L0A190 ;MISTAKE
L0A190:
MOVEQ #0,D0
MOVE.B 1(A6,A4.L),D0
ADDQ.W #2,A4
ADD.B D0,D0
MOVE.W L0A150(PC,D0.W),D0
BEQ.S L0A1A4
JMP L0A190(PC,D0.W)
L0A1A4 MOVEQ #-7,D0 ;Not found
RTS
L0A1A8 MOVEA.L A2,A3
ANDI.B #$0F,1(A6,A3.L)
MOVE.L A3,-(A7)
MOVE.B $01(A6,A3.L),-(A7)
JSR L07A8E(PC) ;*/undomodify BSR L07A8E
BNE.S L0A1E8
CMPI.W #$8405,D1
BNE.S L0A1F6
CMPI.B #1,1(A6,A3.L)
BNE.S L0A242
MOVE.L 4(A6,A3.L),D0
BLT.S L0A242
MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L D0,A2
MOVE.L D0,-(A7)
LEA 2(A4),A0
JSR L06446(PC) ;*/undomodify BSR L06446
MOVEA.L A0,A4
MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L (A7)+,A2
L0A1E8 BNE.S L0A244
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8401,D1
BNE.S L0A242
SF (A7)
L0A1F6 CMPI.W #$8401,D1
BNE.S L0A242
ADDQ.W #2,A4
MOVE.B (A7),D0
MOVEA.L A4,A0
SUBA.L BV_VVBAS(A6),A2 ;variable values
; --------------------------------------------------------------
;*/beginoverlay
;*/note when error fix donated by Simon N Goodwin
move.l a2,-(a7) ;*/note movem.l a2/a4,-(a7)
JSR L05A84(PC) ;*/undomodify BSR L05A84
movea.l $0028(a6),a2 ;*/note movem.l (a7)+,a2/a4
adda.l (a7)+,a2 ;*/note adda.l $0028(a6),a2
movea.l a0,a4 ;*/note bne.s L0A23C
bne.s L0A23C ;*/note movea.l a0,a4
;*/endoverlay
; --------------------------------------------------------------
MOVE.B (A7)+,D0
MOVEA.L (A7)+,A3
MOVE.B D0,$01(A6,A3.L)
JSR BP_LET(PC) ;*/undomodify BSR BP_LET
BNE.S L0A23A
TST.W $C8(A6)
BEQ.S L0A23A
MOVE.B 0(A6,A3.L),D1
SUBQ.B #2,D1
BEQ.S L0A248
SUBQ.B #4,D1
BEQ.S L0A248
SUBQ.B #1,D1
BEQ.S L0A248
L0A23A RTS
L0A23C BLT.S L0A244
MOVEQ #-$11,D0
BRA.S L0A244
L0A242 ; handling of MISTake and LOCal
MOVEQ #-$0C,D0
L0A244 ADDQ.W #6,A7
RTS
L0A248 ; initialize WHEN
MOVE.L A3,D4
SUB.L BV_NTBAS(A6),D4 ;name table
LSR.L #3,D4
MOVEQ #1,D3
JSR L0ACC2(PC) ;*/undomodify BSR L0ACC2
L0A256 BNE L0A2DA
TST.W $08(A6,A2.L)
BLT.S L0A268
L0A260 MOVEQ #1,D3
JSR L0ACDA(PC) ;*/undomodify BSR L0ACDA
BRA.S L0A256
L0A268 MOVE.W BV_LINUM(A6),$08(A6,A2.L) ;current line #
MOVE.B BV_STMNT(A6),$0A(A6,A2.L) ;current stmnt on line
MOVE.B BV_INLIN(A6),$0B(A6,A2.L) ;Processing inline clause
MOVE.W BV_INDEX(A6),$0C(A6,A2.L) ;Name tab row of last lp
MOVE.W D4,-(A7)
MOVE.W D2,-(A7)
MOVE.L D1,-(A7)
MOVE.W $02(A6,A2.L),D4
MOVE.B $04(A6,A2.L),D1
SUBA.L BV_VVBAS(A6),A2 ;variable values
MOVE.L A2,-(A7)
MOVE.B D1,-(A7)
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L0A2A0
JSR L0958E(PC) ;*/undomodify BSR L0958E
L0A2A0 JSR L09FA2(PC) ;*/undomodify BSR L09FA2
BNE.S L0A2F2
JSR L0A96A(PC) ;*/undomodify BSR L0A96A
BNE.S L0A2F2
MOVE.B (A7)+,D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
LEA 2(A4),A0
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L A0,A4
MOVEA.L (A7)+,A2
BNE.S L0A2F6
ADDA.L BV_VVBAS(A6),A2 ;variable values
ADDQ.L #6,BV_RIP(A6) ;arith stack
TST.W 0(A6,A1.L)
BEQ.S L0A2DE
ADDQ.W #8,A7
MOVE.B $0E(A6,A2.L),BV_INLIN(A6) ;Processing inline clause
L0A2DA MOVEQ #0,D0
RTS
L0A2DE MOVE.L A2,-(A7)
JSR L09AFA(PC) ;*/undomodify BSR L09AFA
MOVEA.L (A7)+,A2
BNE.S L0A2F6
MOVE.L (A7)+,D1
MOVE.W (A7)+,D2
MOVE.W (A7)+,D4
BRA L0A260
L0A2F2 MOVEQ #-7,D0 ;Not found error
ADDQ.W #6,A7
L0A2F6 ADDQ.W #8,A7
RTS
L0A2FA ; execute LOCal and MISTake
MOVEQ #-21,D0 ;bad line error
RTS
L0A2FE MOVEA.L $04(A6,A2.L),A2
ADDA.L BV_VVBAS(A6),A2 ;variable values
MOVE.W D7,0(A6,A2.L)
MOVE.L D7,$02(A6,A2.L)
MOVE.W BV_LINUM(A6),D1 ;current line #
MOVE.B BV_STMNT(A6),D0 ;current stmnt on line
CMP.W $06(A6,A2.L),D1
BNE.S L0A322
CMP.B $0A(A6,A2.L),D0
BEQ.S L0A32E
L0A322 MOVE.W D1,$06(A6,A2.L)
MOVE.L D7,$08(A6,A2.L)
MOVE.B D0,$0A(A6,A2.L)
L0A32E MOVEQ #0,D0
RTS
L0A332 ; handling of LET
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$88,D0
BNE.S L0A36E
L0A33C MOVEQ #0,D4
MOVE.W 2(A6,A4.L),D4
ADDQ.W #4,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
JSR L09F96(PC) ;*/undomodify BSR L09F96
MOVE.B 0(A6,A2.L),D0
CMPI.B #$03,D0
BEQ L093E6
CMPI.B #$08,D0
BEQ L0A6F6
MOVEQ #$01,D5
CMPI.B #$04,D0
BEQ L094CA
JMP L0A1A8(PC) ;*/undomodify BRA L0A1A8
L0A36E MOVEQ #-19,D0 ;not implemented error
RTS
L0A372 ; Execute NEXT
JSR L0A09E(PC) ;*/undomodify BSR L0A09E
BLT L0A402
L0A37A MOVE.L D4,D6
CMPI.B #$06,D1
BEQ.S L0A3D4
MOVE.L A2,-(A7)
JSR L04E4C(PC) ;*/undomodify BSR L04E4C
MOVEA.L (A7),A2
MOVEA.L $0058(A6),A1 ;arith stack
SUBA.W #$000C,A1
MOVE.L $14(A6,A2.L),$02(A6,A1.L)
BEQ.S L0A3DE
MOVE.W $12(A6,A2.L),0(A6,A1.L)
MOVE.W 0(A6,A2.L),$06(A6,A1.L)
MOVE.L $02(A6,A2.L),$08(A6,A1.L)
JSR RI_ADD(PC) ;*/undomodify BSR RI_ADD
BLT.S L0A3D6
MOVE.L A1,BV_RIP(A6) ;arith stack
JSR RI_DUP(PC) ;*/undomodify BSR RI_DUP
MOVEA.L (A7),A2
BSR.S L0A404 ;test for end of function
BRA.S L0A3D6 ;error
BRA.S L0A3DA ;end of loop
; back to start of loop
MOVEA.L (A7)+,A2
MOVE.W 0(A6,A0.L),0(A6,A2.L)
MOVE.L $02(A6,A0.L),$02(A6,A2.L)
ADDQ.L #6,BV_RIP(A6) ;arith stack
L0A3D4 BRA.S L0A3E4
L0A3D6 ADDQ.W #4,A7
RTS
; end of loop
L0A3DA ADDQ.L #6,BV_RIP(A6) ;arith stack
L0A3DE MOVEA.L (A7)+,A2
MOVEQ #$01,D3
BRA.S L0A3E6
L0A3E4 MOVEQ #0,D3
L0A3E6 BSR.S L0A44C
BNE.S L0A402
TST.B BV_INLIN(A6) ;Processing inline clause?
BGT.S L0A3F4
SF BV_INLIN(A6) ;Processing inline clause
L0A3F4 CMPI.B #$7F,BV_STMNT(A6) ;current stmnt on line
BNE.S L0A400
SF BV_INLIN(A6) ;Processing in inline clause
L0A400 MOVEQ #0,D0
L0A402 RTS
L0A404 ; test start and end of a loop
MOVE.L A2,-(A7)
SUBQ.W #6,A1
MOVE.L $0E(A6,A2.L),$02(A6,A1.L)
MOVE.W $0C(A6,A2.L),0(A6,A1.L)
JSR RI_SUB(PC) ;*/undomodify BSR RI_SUB
MOVEA.L (A7)+,A2
BLT.S L0A44A
MOVEQ #$0D,D1
ADD.W 0(A6,A1.L),D1
CMP.W $12(A6,A2.L),D1
BGT.S L0A42E
LEA $C(A2),A0
BRA.S L0A446
L0A42E MOVEA.L $0058(A6),A0 ;arith stack
TST.B $02(A6,A1.L)
BLT.S L0A440
TST.B $14(A6,A2.L)
BLT.S L0A446
BRA.S L0A448
L0A440 TST.B $14(A6,A2.L)
BLT.S L0A448
L0A446 ADDQ.L #2,(A7)
L0A448 ADDQ.L #2,(A7)
L0A44A RTS
L0A44C ; position pointer to code after loop
MOVE.B BV_STMNT(A6),-(A7) ;current stmnt on line
MOVE.L BV_LINUM(A6),-(A7) ;current line #
MOVE.L A4,-(A7)
MOVE.W $06(A6,A2.L),D4
JSR L09FA2(PC) ;*/undomodify BSR L09FA2
BNE.S L0A4AA
JSR L0A96A(PC) ;*/undomodify BSR L0A96A
BNE.S L0A4AA
MOVE.B $0A(A6,A2.L),D4
JSR L0A00A(PC) ;*/undomodify BSR L0A00A
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8102,D1
BEQ.S L0A47E
CMPI.W #$8104,D1
BNE.S L0A4AA
L0A47E ADDQ.W #2,A4
MOVEA.L A4,A5
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMP.W $02(A6,A4.L),D6
BNE.S L0A4AA
TST.B D3
BEQ.S L0A4A4
MOVEA.L A5,A4
ADDA.W $18(A6,A2.L),A4
MOVE.L D6,D4
JSR L09E88(PC) ;*/undomodify BSR L09E88
BLT.S L0A4AC
BEQ.S L0A4A4
MOVEQ #0,D0
BRA.S L0A4AC
L0A4A4 ADDA.W #$000A,A7
RTS
L0A4AA MOVEQ #-$07,D0
L0A4AC MOVEA.L (A7)+,A4
MOVE.L (A7)+,BV_LINUM(A6) ;current line #
MOVE.B (A7)+,BV_STMNT(A6) ;current stmnt on line
TST.L D0
RTS
L0A4BA ; initialize all variables tables procs and funcs of
; proc or line
MOVE.L A4,-(A7)
MOVE.B BV_SING(A6),D6 ;Single line execution
;ON ($FF) or OFF (0)
BEQ.S L0A4CC
MOVEA.L BV_TKBAS(A6),A4 ;token list
MOVEQ #0,D5
BRA.S L0A4EE
L0A4CA SF D6
L0A4CC TST.B BV_EDIT(A6) ;Program has been
;edited ($ff) or not (0)
SF BV_EDIT(A6) ;Program has been
;edited ($ff) or not (0)
BEQ.S L0A4EA
MOVEA.L BV_PFBAS(A6),A4 ;program file
L0A4DA TST.B D6
BNE.S L0A4CA
MOVE.W $04(A6,A4.L),D5
ADDQ.W #6,A4
CMPA.L BV_PFP(A6),A4 ;program running pointer
BLT.S L0A4EE
L0A4EA MOVEA.L (A7)+,A4
RTS
L0A4EE BSR.S L0A56C ;omit spaces
CMPI.B #$88,D0
BEQ.S L0A526
CMPI.B #$81,D0
BNE.S L0A55C
ADDQ.W #2,A4
CMPI.B #$14,D1
BEQ.S L0A4EE
CMPI.B #$02,D1
BNE.S L0A50E
BSR.S L0A56C
BRA.S L0A534
L0A50E CMPI.B #$04,D1
BNE.S L0A51E
BSR.S L0A56C
CMPI.B #$88,D0
BNE.S L0A55C
BRA.S L0A534
L0A51E CMPI.B #$1B,D1
BNE.S L0A53A
BSR.S L0A56C
L0A526 MOVE.L A4,D4
ADDQ.W #4,A4
BSR.S L0A56C
CMPI.W #$8401,D1
BNE.S L0A55C
MOVEA.L D4,A4
L0A534 MOVEQ #$02,D1
L0A536 BSR.S L0A57E
BRA.S L0A55C
L0A53A CMPI.B #$07,D1
BNE.S L0A554
BSR.S L0A56C
MOVE.W D1,D4
ADDQ.W #2,A4
BSR.S L0A56C
MOVEQ #$04,D1
CMPI.B #$08,D4
BEQ.S L0A536
MOVEQ #$05,D1
BRA.S L0A536
L0A554 CMPI.B #$19,D1
BNE.S L0A55C
BSR.S L0A5CE
L0A55C JSR L09B32(PC) ;*/undomodify BSR L09B32
BGE.S L0A568
ADDQ.W #2,A4
BRA L0A4DA
L0A568 ADDQ.W #2,A4
BRA.S L0A4EE
L0A56C MOVE.W 0(A6,A4.L),D1
MOVE.B 0(A6,A4.L),D0
CMPI.B #$80,D0
BNE.S L0A5CC
JMP L09072(PC) ;*/undomodify BRA L09072
L0A57E MOVEQ #0,D0
MOVE.W 2(A6,A4.L),D0
LSL.L #3,D0
MOVEA.L BV_NTBAS(A6),A0 ;name table
ADDA.L D0,A0
MOVE.B 0(A6,A0.L),D0
CMP.B D0,D1
BEQ.S L0A5BC
SUBQ.B #2,D0
BLT.S L0A5BC
BEQ.S L0A5AC
SUBQ.B #1,D0
BEQ.S L0A5CC
SUBQ.B #2,D0
BLE.S L0A5A6
SUBQ.B #3,D0
BLT.S L0A5AC
L0A5A6 CMPI.B #$04,D1
BGE.S L0A5BC
L0A5AC MOVEA.L A0,A2
MOVEM.L D1/A0,-(A7)
JSR L05784(PC) ;*/undomodify BSR L05784
MOVEM.L (A7)+,D1/A0
BNE.S L0A5CC
L0A5BC MOVE.B D1,0(A6,A0.L)
SUBQ.B #4,D1
BEQ.S L0A5C8
SUBQ.B #1,D1
BNE.S L0A5CC
L0A5C8 MOVE.W D5,$04(A6,A0.L)
L0A5CC RTS
L0A5CE ; initialize variable in name table
MOVEQ #0,D3
SUBQ.W #2,A4
L0A5D2 MOVE.W #$8800,D4
BSR.S L0A5E0
BNE.S L0A60C
MOVEQ #$03,D1
BSR.S L0A57E
BRA.S L0A5D2
L0A5E0 ; look for first variable without parenthesis
MOVEQ #0,D3
L0A5E2 JSR L09072(PC) ;*/undomodify BSR L09072
CMP.W D4,D1
BNE.S L0A5F0
TST.B D3
BEQ.S L0A60C
BRA.S L0A5E2
L0A5F0 CMPI.W #$8405,D1
BNE.S L0A5FA
ADDQ.B #1,D3
BRA.S L0A5E2
L0A5FA CMPI.W #$8406,D1
BNE.S L0A604
SUBQ.B #1,D3
BRA.S L0A5E2
L0A604 JSR L09686(PC) ;*/undomodify BSR L09686
BNE.S L0A5E2
MOVEQ #$01,D1
L0A60C RTS
L0A60E ; point to next instruction in line
JSR L09B32(PC) ;*/undomodify BSR L09B32
BGE.S L0A640
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L0A63E
ADDQ.W #2,A4
CMPA.L BV_PFP(A6),A4 ;program running pointer
BLT.S L0A626
JMP L0A994(PC) ;*/undomodify BRA L0A994
L0A626 MOVE.W 0(A6,A4.L),D0
ADD.W D0,BV_LENGTH(A6) ;current length
MOVE.W $04(A6,A4.L),BV_LINUM(A6) ;current line #
MOVEQ #$01,D0
MOVE.B D0,BV_STMNT(A6) ;current stmnt on line
ADDQ.W #6,A4
MOVEQ #0,D1
L0A63E RTS
L0A640 ADDQ.W #2,A4
ADDQ.B #1,BV_STMNT(A6) ;current stmnt on line
MOVEQ #0,D0
RTS
L0A64A ; point to according value of select
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8117,D1
BEQ.S L0A6CE
BSR.S L0A68C
CMPI.W #$810B,0(A6,A4.L)
BEQ.S L0A672
BSR.S L0A6D6
MOVE.W 0(A6,A1.L),D0
BEQ.S L0A6CA
ADDI.W #$18,D0
SUB.W -6(A6,A1.L),D0
BLE.S L0A6CA
BRA.S L0A6A6
L0A672 BSR.S L0A6D6
TST.B $02(A6,A1.L)
BGT.S L0A6A6
ADDQ.W #2,A4
ADDQ.L #6,BV_RIP(A6) ;arith stack
BSR.S L0A68C
BSR.S L0A6D6
TST.B $02(A6,A1.L)
BLT.S L0A6A6
BRA.S L0A6CA
L0A68C MOVEA.L A4,A0
SUBA.L BV_VVBAS(A6),A2 ;variable values
MOVE.L A2,-(A7)
JSR L05A7E(PC) ;*/undomodify BSR L05A7E
MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L (A7)+,A2
MOVEA.L A0,A4
BEQ.S L0A6D4
ADDQ.W #4,A7
RTS
L0A6A6 ADDQ.L #6,BV_RIP(A6) ;arith stack
L0A6AA MOVE.W 0(A6,A4.L),D0
CMPI.W #$8404,D0
BNE.S L0A6B8
ADDQ.W #2,A4
BRA.S L0A64A
L0A6B8 CMPI.W #$840A,D0
BEQ.S L0A6D2
CMPI.W #$8402,D0
BEQ.S L0A6D2
JSR L09072(PC) ;*/undomodify BSR L09072
BRA.S L0A6AA
L0A6CA ADDQ.L #6,BV_RIP(A6) ;arith stack
L0A6CE MOVEQ #0,D0
RTS
L0A6D2 MOVEQ #-$01,D0
L0A6D4 RTS
L0A6D6 SUBQ.W #6,A1
MOVE.L $02(A6,A2.L),$02(A6,A1.L)
MOVE.W 0(A6,A2.L),0(A6,A1.L)
JSR RI_SUB(PC) ;*/undomodify BSR RI_SUB
BEQ.S L0A6EC
ADDQ.W #4,A7
L0A6EC RTS
L0A6EE ; execute BASIC instruction
MOVEA.L $B0(A6),A4
MOVEA.L $B4(A6),A2
L0A6F6 SF $B8(A6)
MOVE.L A4,$00B0(A6)
MOVE.L A2,$00B4(A6)
MOVE.L $04(A6,A2.L),D4
MOVEA.L A4,A0
MOVE.L BV_NTP(A6),D0 ;name table running pointer
SUB.L BV_NTBAS(A6),D0 ;name table
MOVE.L D0,-(A7)
JSR L0614A(PC) ;*/undomodify BSR L0614A
BNE.S L0A724
MOVE.W 0(A6,A0.L),D1
JSR L09686(PC) ;*/undomodify BSR L09686
BEQ.S L0A732
MOVEQ #-$0F,D0
L0A724 MOVE.L BV_NTBAS(A6),D1 ;name table
ADD.L (A7)+,D1
MOVE.L D1,BV_NTP(A6) ;name table running pointer
TST.L D0
RTS
L0A732 MOVE.L A5,D0
SUB.L BV_NTBAS(A6),D0 ;name table
MOVE.L D0,-(A7)
MOVEA.L A0,A4
MOVEA.L BV_NTBAS(A6),A3 ;name table
ADDA.L $0004(A7),A3
MOVEA.L D4,A2
MOVEA.L BV_RIP(A6),A1 ;arith stack
SUBA.L BV_RIBAS(A6),A1 ;arith stack running ptr
SUBA.L BV_TKBAS(A6),A4 ;token list
MOVEM.L D5-D7/A1/A4,-(A7)
MOVE.L BV_LINUM(A6),-(A7) ;current line #
MOVE.B BV_STMNT(A6),-(A7) ;current stmnt on line
MOVE.L BV_INLIN(A6),-(A7) ;Processing in inline clause
JSR (A2) ;call Machinecode procedure
MOVE.L D0,D2 ;*** Procedure return ***
MOVE.L (A7)+,BV_INLIN(A6) ;Processing inline clause
MOVE.B (A7)+,BV_STMNT(A6) ;current stmnt on line
MOVE.L (A7)+,BV_LINUM(A6) ;current line #
MOVEM.L (A7)+,D5-D7/A1/A4
ADDA.L BV_TKBAS(A6),A4 ;token list
ADDA.L BV_RIBAS(A6),A1 ;arith stack running ptr
MOVE.L A1,BV_RIP(A6) ;arith stack
MOVEA.L BV_NTBAS(A6),A5 ;name table
MOVEA.L A5,A3
ADDA.L (A7)+,A5
ADDA.L (A7)+,A3
JSR STO_VARValue(PC) ;*/undomodify BSR STO_VARValue
MOVE.L D2,D0
TST.B $B8(A6) ;undo rt stack then redo
;procedure
BNE L097E0
RTS
L0A79C MOVE.B #$7F,BV_STMNT(A6) ;current stmnt on line
MOVEQ #0,D4
MOVE.W BV_INDEX(A6),D4 ;Name tab row of last lp
JSR L0A0AA(PC) ;*/undomodify BSR L0A0AA
BGE L0A37A
RTS
L0A7B2 ; execute DATA and REMark lines
MOVEQ #0,D0
RTS
L0A7B6 ; execute a conditional repeat
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$88,D0
BNE.S L0A7F0
MOVEQ #0,D4
MOVE.W 2(A6,A4.L),D4
ADDQ.W #4,A4
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L0A7D8
MOVE.B #1,BV_INLIN(A6) ;Processing inline clause
MOVE.W D4,BV_INDEX(A6) ;Name tab row of last lp
L0A7D8 JSR L09F96(PC) ;*/undomodify BSR L09F96
MOVE.B 0(A6,A2.L),D2
MOVEQ #$06,D1
SUBQ.B #2,D2
BEQ.S L0A7F4
SUBQ.B #4,D2
BEQ.S L0A81C
MOVEQ #$1A,D1
SUBQ.B #1,D2
BEQ.S L0A7F4
L0A7F0 MOVEQ #-$0C,D0
RTS
L0A7F4 ; initialize conditions of REPeat loop
MOVE.L A2,-(A7)
MOVE.L 4(A6,A2.L),D2
BLT.S L0A806
MOVEA.L BV_VVBAS(A6),A0 ;variable values
ADDA.L D2,A0
JSR L04FE8(PC) ;*/undomodify BSR L04FE8
L0A806 MOVEQ #$0C,D1
JSR L04DF6(PC) ;*/undomodify BSR L04DF6
SUBA.L BV_VVBAS(A6),A0 ;variable values
MOVEA.L (A7)+,A2
MOVE.L A0,$04(A6,A2.L)
MOVE.B #$06,0(A6,A2.L)
L0A81C JMP L0A2FE(PC) ;*/undomodify BRA L0A2FE
L0A820 ; execute RESTore
CLR.W BV_DALNO(A6) ;Current DATA line #
MOVEA.L A4,A0
JSR L05A82(PC) ;*/undomodify BSR L05A82
MOVEA.L A0,A4
BLT.S L0A848
BGT.S L0A83A
ADDQ.L #2,BV_RIP(A6) ;arith stack
MOVE.W 0(A6,A1.L),BV_DALNO(A6) ;Current DATA line #
L0A83A MOVE.B #$01,BV_DASTM(A6) ;Current DATA statement #
MOVE.B #$01,BV_DAITM(A6) ;Next DATA item to read
MOVEQ #0,D0
L0A848 RTS
L0A84A ; execute conditions fo SELect
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8115,D1
BNE.S L0A85A
ADDQ.W #2,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
L0A85A MOVEQ #0,D4
MOVE.W $02(A6,A4.L),D4
ADDQ.W #4,A4
JSR L09F80(PC) ;*/undomodify BSR L09F80
SUBQ.B #2,D2
BNE.S L0A8A0
TST.L D0
BLT.S L0A89C
JSR L09852(PC) ;*/undomodify BSR L09852
BLT.S L0A88C
TST.B BV_INLIN(A6) ;Processing inline clause?
BNE.S L0A87E
ST BV_INLIN(A6) ;Processing inline clause
L0A87E JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$8401,D1
BNE.S L0A88C
ADDQ.W #2,A4
BRA.S L0A892
L0A88C JSR L09D72(PC) ;*/undomodify BSR L09D72
BNE.S L0A898
L0A892 JSR L0A64A(PC) ;*/undomodify BSR L0A64A
BLT.S L0A88C
L0A898 MOVEQ #0,D0
RTS
L0A89C MOVEQ #-17,D0 ;Error in expression
RTS
L0A8A0 MOVEQ #-12,D0 ;Bad name
RTS
L0A8A4 ; supervisor of direct or programm lines
MOVEA.L BV_PFBAS(A6),A4 ;program file
L0A8A8 SF BV_INLIN(A6) ;Processing inline clause
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L0A8B8
L0A8B2 BSR L0A966
BNE.S L0A8F8
L0A8B8 MOVEQ #1,D0
JSR L04E32(PC) ;*/undomodify BSR L04E32
;allocate memory
MOVEQ #0,D0
; --------------------------------------------------------------
;*/beginoverlay
ifd NoTas
L0A8C0:
BSR L0A56C ;*/modify JSR $A56C(PC)
CMPI.B #$81,D0
BNE.S L0A8D0
BSR L0A190 ;*/modify JSR $A190(PC)
BRA.S o0A8EA ;*/modify BRA.S $A8EA
L0A8D0:
SUBI.B #$88,D0 ;*/modify CMPI.B #$88,D0
BNE.S L0A8DC
BSR L0A33C ;*/modify JSR $A33C(PC)
BRA.S o0A8EA ;*/modify BRA.S $A8EA
L0A8DC:
ADDQ.B #$04,D0 ;*/modify CMPI.B #$84,D0
BNE.S o0A8E8 ;*/modify BNE.S $A8E8
BSR L0ABF0 ;*/modify JSR $ABF0(PC)
BRA.S o0A8EA ;*/modify BRA.S $A8EA
; test for errors and Break
o0A8E8:
MOVEQ #-19,D0 ;Not implemented error
o0A8EA:
TST.L D0
BNE L09BA8
BSET #7,BV_BRK(A6) ;*/mend TAS BV_BRK(A6)
;There has been a
;break (0) or not ($80)
BEQ L09B90
L0A8F8:
BSET #7,BV_CONT(A6) ;*/mend TAS BV_CONT(A6)
;continue ($80)
;or stop (0) processing
BEQ.S L0A938 ;*/modify BEQ.L L0A9BA
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L0A90C
CMPA.L BV_PFBAS(A6),A4 ;program file
BLE.S L0A8A4
L0A90C:
BSR L09B32 ;*/modify JSR $9B32(PC)
BGE.S L0A95C
TST.B BV_INLIN(A6) ;Processing inline clause?
BEQ.S L0A94E
BLT.S L0A924
BSR L0A79C ;*/modify JSR $A79C(PC)
TST.B BV_INLIN(A6) ;Processing inline clause
BNE.S o0A8EA ;*/modify BNE.S L0A8EA
;
endc
;
ifnd NoTas
L0A8C0:
JSR L0A56C(PC)
CMPI.B #$81,D0
BNE.S L0A8D0
JSR L0A190(PC)
BRA.S o0A8EA
L0A8D0:
CMPI.B #$88,D0
BNE.S L0A8DC
JSR L0A33C(PC)
BRA.S o0A8EA
L0A8DC:
CMPI.B #$84,D0
BNE.S L0A8E8
JSR L0ABF0(PC)
BRA.S o0A8EA
L0A8E8:
MOVEQ #$-13,D0
o0A8EA:
TST.L D0
BNE L09BA8
TAS $008F(A6)
BEQ L09B90
L0A8F8:
TAS BV_CONT(A6)
BEQ L0A9BA
TST.B $6F(A6)
BNE.S L0A90C
CMPA.L $10(A6),A4
BLE.S L0A8A4
L0A90C:
JSR L09B32(PC)
BGE.S L0A95C
TST.B $6E(A6)
BEQ.S L0A94E
BLT.S L0A924
JSR L0A79C(PC)
TST.B $6E(A6)
BNE.S o0A8EA
;
endc
;*/endoverlay
; --------------------------------------------------------------
; WHEN ERROR ?
L0A924:
TST.B $C0(A6)
BEQ.S L0A93C
TST.B $BF(A6)
BEQ.S L0A94E
JSR BAS_CONTinue(PC) ;*/undomodify BSR BAS_CONTinue
ST BV_CONT(A6) ;continue ($80) or stop (0)
L0A938:
JMP L0A9BA(PC) ;*/undomodify BRA L0A9BA
L0A93C:
MOVE.W BV_LINUM(A6),D4 ;current line #
MOVEQ #-1,D3
JSR L0ACC2(PC) ;*/undomodify BSR L0ACC2
BNE.S L0A94E
JSR L09AEE(PC) ;*/undomodify BSR L09AEE
BRA.S L0A90C
L0A94E ; test for return after line end
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
ADDQ.W #2,A4
BEQ L0A8B2
BSR.S L0A998
BRA.S L0A990
L0A95C ADDQ.W #2,A4
ADDQ.B #1,BV_STMNT(A6) ;current stmnt on line
BRA L0A8B8
L0A966 ; point to first instruction in line
SF BV_INLIN(A6) ;Processing inline clause
L0A96A CLR.W BV_LINUM(A6) ;current line #
TST.B BV_SING(A6) ;Single line execution
;ON ($FF) or OFF (0)
BNE.S L0A98A
CMPA.L BV_PFP(A6),A4 ;program running pointer
BGE.S L0A994
MOVE.W 0(A6,A4.L),D0
ADD.W D0,BV_LENGTH(A6) ;current length
MOVE.W 4(A6,A4.L),BV_LINUM(A6) ;current line #
ADDQ.W #6,A4
L0A98A MOVE.B #1,BV_STMNT(A6) ;current stmnt on line
L0A990 MOVEQ #0,D0
RTS
L0A994 ; set flags after end of prog
SF BV_CONT(A6) ;continue ($80) or stop (0)
L0A998 MOVE.W #$FFFF,BV_NXLIN(A6) ;line # to start after
;to start after
MOVE.W #4,BV_STOPN(A6) ;Which stop number set
RTS
; execute system commands
; Labels relativ to L0A9BA
; NOTE: ALL following commands have been rewritten
; by Tony Tebby - if you use TOOLKIT II you can easily
; omit all the code that is following
L0A9A6 DC.W L0A9F2-L0A9BA ;CLEAR
DC.W L0AADC-L0A9BA ;NEW
DC.W L0ABCA-L0A9BA ;STOP
DC.W L0AA5E-L0A9BA ;RUN
DC.W L0AADC-L0A9BA ;LRUN
DC.W L0AADC-L0A9BA ;LOAD
DC.W L0ABDC-L0A9BA ;MRUN
DC.W L0ABDC-L0A9BA ;MERGE
DC.W L0ABA6-L0A9BA ;CONTINUE-RETRY
DC.W L0A9C6-L0A9BA ;ERROR-RETURN
L0A9BA MOVE.W BV_STOPN(A6),D1 ;Which stop number set
MOVE.W L0A9A6(PC,D1.W),D1
JMP L0A9BA(PC,D1.W)
L0A9C6 ; restore system and error return
JSR L09BA8(PC) ;*/undomodify BSR L09BA8
MOVEA.L BV_RTP(A6),A0 ;return table running ptr
SF BV_AUTO(A6) ;Whether AUTO/EDIT
;is on ($FF) or off (0)
L0A9D2 CMPA.L BV_RTBAS(A6),A0 ;return table
BLE.S L0A9FC
MOVE.B -$08(A6,A0.L),D0
BEQ.S L0A9EE
MOVE.L -$18(A6,A0.L),D0
ADD.L BV_NTBAS(A6),D0 ;name table
MOVE.L D0,BV_NTP(A6) ;name table running pointer
SUBA.W #$0010,A0
L0A9EE SUBQ.W #8,A0
BRA.S L0A9D2
L0A9F2 ; system command clear
TST.B BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
BEQ.S L0A9FC
JSR L097E0(PC) ;*/undomodify BSR L097E0
L0A9FC BSR L0AA88
JSR L056C6(PC) ;*/undomodify BSR L056C6
MOVEA.L BV_NTBAS(A6),A0 ;name table
L0AA08 MOVE.B 0(A6,A0.L),D0
SUBQ.B #1,D0
BEQ.S L0AA4A
SUBQ.B #3,D0
BLT.S L0AA1C
SUBQ.B #2,D0
BLT.S L0AA52
SUBQ.B #2,D0
BGE.S L0AA52
L0AA1C MOVE.W 2(A6,A0.L),D0
BLT.S L0AA4A
BSR L0AACC
MOVE.B -1(A6,A1.L),D0
MOVEQ #1,D1
SUBI.B #$25,D0
BLT.S L0AA38
BGT.S L0AA36
ADDQ.W #1,D1
L0AA36 ADDQ.W #1,D1
L0AA38 MOVE.B D1,1(A6,A0.L)
MOVE.B D7,0(A6,A0.L)
MOVE.L #$FFFFFFFF,4(A6,A0.L)
BRA.S L0AA52
L0AA4A MOVE.L D7,0(A6,A0.L)
MOVE.L D7,4(A6,A0.L)
L0AA52 ADDQ.W #8,A0
CMPA.L BV_NTP(A6),A0 ;name table running pointer
BLT.S L0AA08
ST BV_EDIT(A6) ;Program has been
;edited ($ff) or not (0)
L0AA5E ; execute RUN
TST.B BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
BEQ.S L0AA80
MOVE.W BV_NXLIN(A6),$B4(A6) ;line # to start after
MOVE.W BV_STOPN(A6),$B6(A6) ;Which stop number set
JSR L097E0(PC) ;*/undomodify BSR L097E0
MOVE.W $B4(A6),BV_NXLIN(A6)
MOVE.W $B6(A6),BV_STOPN(A6)
L0AA80 JSR L0A4BA(PC) ;*/undomodify BSR L0A4BA
BRA L0ABE6
L0AA88 ; clear stacks and storage places
MOVEQ #0,D7
MOVE.L D7,BV_DALNO(A6) ;Current DATA line #
MOVE.B #$01,BV_DAITM(A6) ;Next DATA item to read
MOVE.L BV_VVBAS(A6),$2C(A6) ;variable values
MOVE.L #$FFFFFFFF,$CA(A6) ;
MOVE.W D7,$C8(A6) ;
MOVE.L BV_RTBAS(A6),BV_RTP(A6) ;return table
MOVEQ #$58,D0
L0AAAE MOVE.L BV_RIBAS(A6),0(A6,D0.W) ;arith stack running ptr
SUBQ.W #4,D0
CMPI.B #$48,D0
BGE.S L0AAAE
SF $0090(A6) ;Need to unravel
;($ff) or not (0)
MOVE.L D7,BV_VVFREE(A6) ;First free space in vvtable
JSR L04F9E(PC) ;*/undomodify BSR L04F9E
JMP L04F96(PC) ;*/undomodify BRA L04F96
L0AACC ; point to end of name list
MOVEA.L BV_NLBAS(A6),A1 ;name list
ADDA.W D0,A1
MOVEQ #$01,D0
ADD.B 0(A6,A1.L),D0
ADDA.W D0,A1
RTS
L0AADC:
MOVEA.L BV_CHP(A6),A3 ;channel name running ptr
MOVEA.L BV_CHBAS(A6),A2 ;channel name
ADDA.W #$78,A2
MOVE.L A2,BV_CHP(A6) ;channel name running ptr
L0AAEC CMPA.L A3,A2
BGE.S L0AB02
MOVE.L 0(A6,A2.L),D0
BLT.S L0AAFC
MOVEA.L D0,A0
MOVEQ #2,D0 ;IO.CLOSE
TRAP #2
L0AAFC ADDA.W #$0028,A2
BRA.S L0AAEC
L0AB02 MOVEQ #$10,D0 ;MT.DMODE sets or reads the
;display mode
MOVEQ #-1,D1 ;read mode
MOVEQ #-1,D2 ;read display
TRAP #1
MOVEQ #$10,D0 ;MT.DMODE sets this mode
TRAP #1
MOVE.L BV_LNBAS(A6),BV_LNP(A6) ;line # table
CLR.W BV_LSBAS(A6) ;Bottom line in window
BSR L0AA88
MOVE.L BV_PFBAS(A6),BV_PFP(A6) ;program file
MOVEQ #0,D0
MOVEQ #0,D5
MOVEA.L BV_NTBAS(A6),A0 ;name table
MOVEQ #8,D1
L0AB2C CMPA.L BV_NTP(A6),A0 ;name table running pointer
BEQ.S L0AB84
CMP.B 0(A6,A0.L),D1
BGT.S L0AB42
TST.B D5
BNE.S L0AB50
MOVE.W 2(A6,A0.L),D0
BRA.S L0AB80
L0AB42 TST.B D5
BNE.S L0AB80
MOVEA.L A0,A2
BSR.S L0AACC
MOVEA.L A1,A3
ST D5
BRA.S L0AB80
L0AB50 MOVE.L 0(A6,A0.L),0(A6,A2.L)
MOVE.L $04(A6,A0.L),$04(A6,A2.L)
MOVE.W $02(A6,A2.L),D0
BSR L0AACC
SUBA.W D0,A1
MOVE.L A3,D2
SUB.L BV_NLBAS(A6),D2 ;name list
MOVE.W D2,$02(A6,A2.L)
ADDQ.W #8,A2
L0AB72 MOVE.B 0(A6,A1.L),0(A6,A3.L)
ADDQ.W #1,A1
ADDQ.W #1,A3
SUBQ.W #1,D0
BGT.S L0AB72
L0AB80 ADDQ.W #8,A0
BRA.S L0AB2C
L0AB84 TST.B D5
BEQ.S L0AB90
MOVE.L A2,BV_NTP(A6) ;name table running pointer
MOVE.L A3,BV_NLP(A6) ;name list running pointer
L0AB90 JSR L04F9A(PC) ;*/undomodify BSR L04F9A
JSR L04F8E(PC) ;*/undomodify BSR L04F8E
JSR L04F92(PC) ;*/undomodify BSR L04F92
JSR L04F8A(PC) ;*/undomodify BSR L04F8A
JSR L056C6(PC) ;*/undomodify BSR L056C6
BRA.S L0ABC4
L0ABA6 ; execute RETRY or CONTINUE
MOVE.W BV_CNLNO(A6),BV_NXLIN(A6) ;Line to CONTINUE from
MOVE.B BV_CNSTM(A6),$8A(A6) ;Statement to CONTINUE from
MOVE.W #$FFFF,BV_CNLNO(A6) ;Line to CONTINUE from
MOVE.B BV_CNINL(A6),BV_INLIN(A6) ;CONTINUE Inline loop flg
MOVE.W BV_CNIND(A6),BV_INDEX(A6) ;Inline loop indx
L0ABC4 SF BV_COMLN(A6) ;Command line saved ($ff)
;or not (0)
BRA.S L0ABEC
L0ABCA ; execute STOP
TST.B $C0(A6)
SF $C0(A6)
BNE.S L0ABE6
MOVEQ #0,D0
JSR L09B5E(PC) ;*/undomodify BSR L09B5E
BRA.S L0ABEC
L0ABDC ; execute MRUN or MERGE
TST.B BV_UNRVL(A6) ;Need to unravel
;($ff) or not (0)
BEQ.S L0ABE6
JSR L097E0(PC) ;*/undomodify BSR L097E0
L0ABE6 MOVE.B BV_SING(A6),BV_COMLN(A6) ;Single line execution
;ON ($FF) or OFF (0)
L0ABEC MOVEQ #0,D0
RTS
L0ABF0 ; handling of lines starting with =
CMPI.W #$8401,D1
BNE.S L0ABFC
ADDQ.W #2,A4
JMP L09CFE(PC) ;*/undomodify BRA L09CFE
;search end of SELect
L0ABFC MOVEQ #0,D0
RTS
L0AC00 ; execute WHEN
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.W #$810E,D1
BNE.S L0AC32
MOVE.W BV_LINUM(A6),$00BC(A6) ;current line #
MOVE.B BV_STMNT(A6),$00BE(A6) ;current stmnt on line
JSR L09852(PC) ;*/undomodify BSR L09852
SEQ $00BF(A6)
BEQ.S L0AC28
MOVEQ #$06,D2
JMP L098A8(PC) ;*/undomodify BRA L098A8
L0AC26 ADDQ.W #2,A4
L0AC28 JSR L09B32(PC) ;*/undomodify BSR L09B32
BGE.S L0AC26
L0AC2E MOVEQ #0,D0
RTS
L0AC32 ; WHENvar
MOVE.W 2(A6,A4.L),D4
ADDQ.W #4,A4
JSR L0A56C(PC) ;*/undomodify BSR L0A56C
CMPI.B #$85,D0
BEQ.S L0AC54
L0AC42:
MOVEQ #$01,D3
JSR L0ACC2(PC) ;*/undomodify BSR.S L0ACC2
;*/undomodify nop
BNE.S L0AC2E
ST 0(A6,A2.L)
SUBQ.W #1,$C8(A6)
BRA.S L0AC42
L0AC54:
MOVEQ #$01,D3
JSR L0ACC2(PC) ;*/undomodify BSR.S L0ACC2
;*/undomodify nop
L0AC5A:
BNE.S L0AC6C
MOVE.W BV_LINUM(A6),D0 ;current line #
CMP.W $02(A6,A2.L),D0
BEQ.S L0AC76
JSR L0ACDA(PC) ;*/undomodify BSR.S L0ACDA
;*/undomodify nop
BRA.S L0AC5A
L0AC6C:
MOVEQ #0,D3
JSR L0ACC2(PC) ;*/undomodify BSR.S L0ACC2
;*/undomodify nop
ADDQ.W #1,$00C8(A6)
L0AC76:
MOVE.W D4,0(A6,A2.L)
MOVE.W BV_LINUM(A6),$02(A6,A2.L) ;current line #
MOVE.B BV_STMNT(A6),$04(A6,A2.L) ;current statement
MOVE.W BV_LINUM(A6),$06(A6,A2.L) ;current line #
MOVE.B #$7F,$05(A6,A2.L)
CLR.L $0A(A6,A2.L)
ST $08(A6,A2.L)
MOVE.L A2,-(A7)
JSR L09852(PC) ;*/undomodify BSR L09852
MOVEA.L (A7)+,A2
SEQ $0E(A6,A2.L)
BEQ.S L0AC28
MOVEQ #$06,D2
MOVE.L A2,-(A7)
JSR L098A8(PC) ;*/undomodify BSR L098A8
MOVE.L (A7)+,D2
MOVE.W BV_LINUM(A6),$06(A6,A2.L) ;current line #
MOVE.B BV_STMNT(A6),$05(A6,A2.L) ;current stmnt on line
BRA L0AC2E
L0ACC2 MOVE.W $00C8(A6),D2
BEQ.S L0AD06
BSR.S L0AD10
L0ACCA MOVE.W 0(A6,A2.L),D0
BLT.S L0ACEC
TST.B D3
BLT.S L0ACF2
BEQ.S L0ACDE
CMP.W D0,D4
BEQ.S L0ACFE
L0ACDA SUBQ.W #1,D2
BEQ.S L0AD02
L0ACDE ADDA.W #$0010,A2
SUBI.L #$00000010,D1
BGE.S L0ACCA
BRA.S L0AD26
L0ACEC TST.B D3
BNE.S L0ACDE
RTS
L0ACF2 CMP.W $06(A6,A2.L),D4
BNE.S L0ACDA
TST.W $08(A6,A2.L)
BLT.S L0ACDA
L0ACFE MOVEQ #0,D0
RTS
L0AD02 MOVEQ #-$01,D0
RTS
L0AD06 TST.B D3
BNE.S L0AD02
TST.L $CA(A6) ;
BLT.S L0AD26
L0AD10 MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L $CA(A6),A2 ;
MOVE.L 0(A6,A2.L),D1
SUBI.L #$14,D1
ADDQ.W #4,A2
RTS
L0AD26 MOVE.L $CA(A6),D1 ;
BGE.S L0AD32
MOVEQ #0,D1
MOVEQ #0,D0
BRA.S L0AD3C
L0AD32 MOVEA.L BV_VVBAS(A6),A2 ;variable values
ADDA.L D1,A2
MOVE.L 0(A6,A2.L),D0
L0AD3C ADDI.L #$140,D1
MOVE.L A2,-(A7)
MOVE.L D0,-(A7)
JSR L04DF6(PC) ;*/undomodify BSR L04DF6
MOVE.L (A7)+,D0
MOVEA.L (A7)+,A2
MOVE.L D1,0(A6,A0.L)
MOVE.L A0,-(A7)
SUB.L D0,D1
L0AD56 ADDQ.W #4,A2
ADDQ.W #4,A0
SUBQ.W #4,D0
BLE.S L0AD66
MOVE.L 0(A6,A2.L),0(A6,A0.L)
BRA.S L0AD56
L0AD66 MOVE.L A0,-(A7)
L0AD68 ST 0(A6,A0.L)
ADDA.W #$10,A0
SUBI.L #$10,D1
BGT.S L0AD68
MOVE.L $CA(A6),D1
BLT.S L0AD8C
MOVEA.L BV_VVBAS(A6),A0 ;variable values
ADDA.L D1,A0
MOVE.L 0(A6,A0.L),D1
JSR L04FE8(PC) ;*/undomodify BSR L04FE8
L0AD8C MOVEA.L (A7)+,A2
MOVE.L (A7)+,D1
SUB.L BV_VVBAS(A6),D1 ;variable values
MOVE.L D1,$CA(A6)
RTS
; --------------------------------------------------------------
;*/endfile